我有一个像这样的收藏号
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'相同。我怎么能这样做? 我已经从here读取,但从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];
}
但是vals的总和仍然产生了错误的价值。
答案 0 :(得分:0)
因此,您需要确保您的输入对此有效(例如,有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;
}
}