C# 用规则生成数字
我有一个像这样的收藏编号C# 用规则生成数字,c#,random,numbers,C#,Random,Numbers,我有一个像这样的收藏编号 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 random = new Random(); var vals = new int[count]; maxLength -= count; for (int i = 0; i < co
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 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”相同。我怎么能做到?
我已经读过了,但是从1到100,我的数字集不包括其中的一些数字
我已经试过这样做了
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 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];
}
但是VAL的总和仍然产生错误的值。因此,您需要确保您的输入在此方面有效,例如,有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;
}
}
旁注-这不是Enumerable.Range47,76。其中i=>tes.Containsi.ToArray与tes相同吗?是的。对不起,重复了。已经编辑过了:你能解释一下什么是“a”的结果吗?我在你的代码中没有看到任何a。我相信你说的是“a”的字符代码。但结果应该与“a”相同,与maxLength不一致。再次抱歉