c# - 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.
How to solve this issue ? Thank you very much.
解决方案
也许试试这个:
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()
。
推荐阅读
- html - CSS 选择器使输入框中的文本变大
- python - 如何在 python 中正确格式化多列整数?
- java - 当使用带有 Location 的 createItem 方法时,即使它在所有列中获得相同的值,也会创建 Location
- node.js - 从 redis 键 nodejs 中弹出值的原子操作
- python - 使用 numpy 将向量添加到矩阵的特定行
- python - 滑动窗口在列而不是行上向下遍历
- php - 我无法在 whatsapp 上分享带有动态 ID 的网站网址
- azure - Conflicting advice on using Azure AD Graph API over MS Graph with Active Directory B2C
- python-3.x - 如何替换给定字典中的项目?
- php - WordPress Ajax 加载更多不显示