繁体   English   中英

生成具有特定总和的随机数

[英]generate random number with a specific sum

如何生成从11008个随机数8个数字的总和是200不是没有在每组中重复相同的数字 显示所有可能的结果。

这取决于随机在这里的含义。 例如,您可以提出这样的问题:

有一根长度为200的棍子,我们应该在上面打上8 - 1 = 7随机标记,将棍子切成8块,并返回这些块的长度

让我们画一个图:

[----------------------------------------------------------]
^     ^     ^      ^       ^       ^       ^       ^       ^ 
0    33    83     135     138     157     177     186     200 <- points

  33    50     52      3      19      20       9       14     <- lengths

代码:

Random random = new Random();

...

int length = 200;
int count = 8;
int prior = 0;

int[] values = Enumerable
  .Range(0, count - 1)
  .Select(_ => random.Next(0, length + 1))
  .OrderBy(item => item)
  .Append(length)
  .Select(item => {
     int savedPrior = prior;

     prior = item;

     return item - savedPrior; })
  .ToArray();

如果您希望所有values不同,您可以尝试在它们不同时重复该过程:

int[] values;
int length = 200;
int count = 8;

do {
  int prior = 0;

  values = Enumerable
    .Range(0, count - 1)
    .Select(_ => random.Next(0, length + 1))
    .OrderBy(item => item)
    .Append(length)
    .Select(item => {
       int savedPrior = prior;

        prior = item;

        return item - savedPrior; })
    .Distinct()
    .ToArray();
}
while (values.Length != count);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM