生成4个随机数,其总和为100,其中一个超过50

时间:2013-12-30 01:46:44

标签: c#

我需要创建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'

7 个答案:

答案 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));
    }
}