使用规则生成数字

本文关键字:数字 规则 | 更新日期: 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;
    }
  }