[英]generate random number with a specific sum
如何生成从1
到100
的8
个随机数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.