使用规则生成数字
本文关键字:数字 规则 | 更新日期: 2023-09-27 18:34:31
>我有一个这样的集合编号
var maxLength=250;
var range=new int[]{48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,71,72,73,74,75};
我想从这些集合中获取 4 个随机数,如果我将其求和,结果应该与"maxLength"相同。我怎么能做到呢?我已经从这里阅读了,但它从 1 到 100,我的号码集合不包括其中一些号码我已经尝试过这样做了
var random = new Random();
var vals = new int[count];
maxLength -= count;
for (int i = 0; i < count; i++)
{
vals[i] = range.Select(x => range[random.Next(0, range.Length)]).FirstOrDefault();
}
vals[count - 1] = maxLength;
Array.Sort(vals);
for (var i = count - 1; i > 0; --i)
{
vals[i] -= vals[i - 1];
}
但是来自价值的总和仍然产生错误的价值。
因此,您需要确保您的输入对此有效(例如,有 4 个数字组合成 maxLength(,但对于问题中提供的输入,这有效:
var maxLength = 250;
var range = new int[] { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75 };
var rand = new Random();
var resultingRandoms = new List<int>();
while (true)
{
resultingRandoms = range.Select(y => range[rand.Next(0, range.Length)]).Take(4).ToList();
if (resultingRandoms.Sum() == maxLength)
{
break;
}
}