[英]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.