我需要创建4个随机数,其总和为100.其中一个超过50且比其他数字大。 我有这个:
int a=0, b=0,c=0,d=0;
int cem=100;
while (a+b+c+d=cem){
Random perc = new Random();
a = perc.Next(50, 100);
b = perc.Next(0, 50);
c = perc.Next(0, 50);
d = perc.Next(0, 50);
}
在编译器中我得到2个错误:
赋值的左侧必须是索引器的变量属性 无法将类型'int'隐式转换为'bool'
答案 0 :(得分:3)
替换
while (a+b+c+d=cem){
与
while (a+b+c+d!=cem){
您正在使用作业(=
)而不是比较(==
/ !=
)。
答案 1 :(得分:3)
除了有关编译器错误消息的其他答案之外,您还应该移动
行Random perc = new Random();
到while
循环的外部。您不需要多个单个随机数生成器,并且由于时间种子,在快速循环中重新创建它可能会产生相同的结果。
答案 2 :(得分:2)
如果你考虑一下,总和100的四个随机数意味着它们中只有三个是随机的,第四个是100减去其他三个......所以不是先做一个循环而是先生成一个数,然后生成另一个数剩余的间隔然后是第三个。
答案 3 :(得分:1)
为什么要使用循环?得到你想要的东西祝你好运: - )
(浪费了太多cpu)
这是我将如何开始这样做;
class Program
{
static void Main(string[] args)
{
int a = 0, b = 0, c = 0, d = 0;
int cem = 100;
Random perc = new Random();
a = perc.Next(50, cem);
cem -= a;
b = perc.Next(0, cem);
cem -= b;
c = perc.Next(0, cem);
cem -= c;
d = cem;
Console.WriteLine("{0} + {1} + {2} + {3} = {4}",a,b,c,d,a+b+c+d);
Console.ReadKey(false);
}
}
答案 4 :(得分:0)
The left-hand side of an assignment must be a variable
Cannot implicitly convert type 'int' to 'bool'
while想要==,假设C#就像C. ==是等式测试,=是赋值。
(显而易见的是,这会导致第一条错误信息。你可能需要考虑为什么会解释第二条错误信息。但是,这样做是一个很好的练习,我不打算解释。)
答案 5 :(得分:0)
这样的事情怎么样,循环次数会减少?
int a = 0, b = 0, c = 0, d = 0;
int cem = 100;
Random perc = new Random();
a = perc.Next(50, cem);
b = perc.Next(0, cem - a);
c = perc.Next(0, cem - a - b);
d = cem - a - b - c;
答案 6 :(得分:0)
class Program {
void Main() {
var random = new Random();
// note it says one of them is more than 50
// so the min value should be 51 not 50
var a = random.Next(51, 100);
// the rest of the number will be less than `a`
// because `a` is more than 50 so the max `remaining`
// will be is 49 (100 - 51)
var remaining = 100 - a;
var b = random.Next(0, remaining);
remaining -= b;
var c = random.Next(0, remaining);
remaining -= c;
var d = remaining;
Console.WriteLine("a: " + a);
Console.WriteLine("b: " + b);
Console.WriteLine("c: " + c);
Console.WriteLine("d: " + d);
Console.WriteLine("total: " + (a + b + c + d));
}
}