首页 > 解决方案 > How to loop random number to make result equal user input summary

问题描述

i have some problem like this. user(A) enter 500000 to my application and then i want to generate 50 random 5 digit number and when summary 50 random number need to equal 500000, How to do like i tried already but it's not working this is my code

            int balane = 500000;
            int nums = 50;
            int max = balane / nums;
            Random rand = new Random();
            int newNum = 0;
            int[] ar = new int[nums];
            for (int i = 0; i < nums - 1; i++)
            {
                newNum = rand.Next(max);
                ar[i] = newNum;
                balane -= newNum;
                max = balane / (nums - i - 1);

                ar[nums - 1] = balane;
            }

            int check = 0;
            foreach (int x in ar)
            {
                check += x;
            }

the result that i tell you not working because in my array list i have value more than 5 digit but the result equal 500000.

enter image description here

How to solve this issue ? Thank you very much.

标签: c#asp.netrandom

解决方案


也许试试这个:

var rnd = new Random();

var numbers = Enumerable.Range(0, 50).Select(x => rnd.Next(500_000)).OrderBy(x => x).ToArray();

numbers = numbers.Skip(1).Zip(numbers, (x1, x0) => x1 - x0).ToArray();

numbers = numbers.Append(500_000 - numbers.Sum()).ToArray();

Console.WriteLine(numbers.Count());
Console.WriteLine(numbers.Sum());

这输出:

50
500000

这是通过在 0 到 499,999 之间生成 50 个随机数来实现的。然后它按升序对它们进行排序,然后得到每个连续对之间的差异。根据定义,这会产生一组 49 个值,加起来几乎是 500,000。然后只需通过 do 添加一个缺失的数字即可500_000 - numbers.Sum()


推荐阅读