rand(1,5)
..生成隨機數例如:4 3 2 3 2
(總和等於14)。隨機,但不應超過總數
我想總不超過x
(這是說5),所以在這種情況下,它可能是:
1 + 2 + 2 = 5
2 + 3 = 5
...等可變長度只要sum < x
我應該生成一個隨機的,檢查x,生成另一個,再次檢查或有另一種方式嗎?
rand(1,5)
..生成隨機數例如:4 3 2 3 2
(總和等於14)。隨機,但不應超過總數
我想總不超過x
(這是說5),所以在這種情況下,它可能是:
1 + 2 + 2 = 5
2 + 3 = 5
...等可變長度只要sum < x
我應該生成一個隨機的,檢查x,生成另一個,再次檢查或有另一種方式嗎?
最明顯的方法就是保持循環,併產生一個越來越小的隨機數,直到你被封鎖。
$min = 2;
$max = 5;
$randoms = [];
while ($max > $min) {
$max -= ($rand = rand($min, $max));
$randoms[] = $rand;
}
更新的實際使用情況(見註釋):
function generateRandomSpend($balance, $maximum = 5, $minimum = 2) {
$amounts = array();
while ($balance) {
// If we can't add any more minimum-spends, stop
if ($balance - $minimum < 0) {
break;
} else {
// Don't generate pointlessly-high values
$maximum = min($balance, $maximum);
$balance -= $amounts[] = rand($minimum, $maximum);
}
}
return $amounts;
}
print_r($s = generateRandomSpend(10));
你也可以做
echo array_sum(generateRandomSpend(10));
得到他們總支出的數值。
這也是工作,並給結果要
<?php
$fixed = 5;
$random = array();
$no = 0;
while(1) {
$number = rand(1,5);
$no +=$number;
if($no > $fixed) {
break;
}
$random[]= $number;
}
?>
@joe問題是指定sum <5不是eqauls爲5,所以它可以。首先不給3,它會單獨3 – 2014-09-25 13:42:52
'而(1)',經典。 – 2014-09-25 13:47:36
你想生成一組固定長度的或希望的一組變長的,只要它的'總和
kero
2014-09-25 13:01:32
可變長度,只要'sum
3zzy
2014-09-25 13:06:22