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不一致。再次抱歉