如何找到一组总和为特定数字的随机数?

  • 本文关键字:数字 随机数 何找 一组 php
  • 更新时间 :
  • 英文 :


这是我下面的代码。如果三个随机数的总和等于 100,则代码本身会回显。现在要得到 100 的结果,$valuestotal我必须重新加载页面很多。但是我想每次重新加载页面时都得到 100 的结果$valuestotal。我该怎么做?

我认为循环循环是可能的。但它给出了相同的结果 x 次。我希望 PHP 不断尝试不同的随机值,当它达到 100 作为$valuestotal的值时,它应该回显$valuestotal......

我真正想要的是,例如,我想要三个随机数得到总共 100,例如 35、25 和 50。或 25 和 15 和 60...这样的例子不胜枚举...

这怎么可能?

$values = rand(1, 100);
$values2 = rand(1, 100);
$values3 = rand(1, 100);
$valuestotal = $values + $values2 + $values3;
//
while ($valuestotal === 100)
{
echo $values;
echo '<br>';
echo $values2;
echo '<br>';
echo $values3;
echo "<br>";
echo $valuestotal;
}

另一种可能的方法。代码比其他一些答案稍微复杂一些,但我想添加一种只需要循环一次的方法。

$target = 100;
$n = 3;
while ($n) {
if (1 < $n--) {
$addend = rand(0, $target - ($n - 1));
$target -= $addend;
$addends[] = $addend;
} else {
$addends[] = $target;
}
}
var_dump($addends);

基本上,你减去一个介于 0 和前一个减法的余数n次之间的随机数,直到只剩下一个重复,余数是最后一块。$n - 1在那里,这样它就不会随机减去太多,以便为其余的重复留下足够的剩余时间。

你不需要在循环内循环。例如,您可以执行以下操作:

<?php
$keepChecking = true;
$values = 0;
$values2 = 0;
$values3 = 0;
$valuestotal = 0;
while($keepChecking){
$values = rand(1, 100);
$values2 = rand(1, 100);
$values3 = rand(1, 100);
$valuestotal = $values + $values2 + $values3;
if ($valuestotal === 100){
$keepChecking = false;
} 
}
echo $values;
echo '<br>';
echo $values2;
echo '<br>';
echo $values3;
echo "<br>";
echo $valuestotal;
?>

结果可能是:

2
37
61
100

可以在这里测试:http://phpfiddle.org/lite

while循环中,只要条件为 真。所以你可以想,你必须多次执行什么,以及 什么时候应该停止?

您需要多次执行的是随机的收集 数字:

while ( ... ) {
# roll dice, save numbers
}

现在,当总和为 100 时,这应该停止。循环中陈述的条件 必须为真才能运行多次,因此从这个意义上说,它必须 在总和不是100 时运行。 这是你得到的一个关键点 反。如果您的病情是假的(碰巧可能是在之后 第一次运行),然后循环已经停止。 你必须在总和的同时运行 不是 100,所以当它是 100 时,它不会再收集随机数。 然后你继续回显它们。

$valuestotal = 0;
while ($valuestotal != 100) {
$value1 = rand(1, 100);
$value2 = rand(1, 100);
$value3 = rand(1, 100);
$valuestotal = $value1 + $value2 + $value3;
}
echo "$value1<br>$value2<br>$value3<br>$valuestotal";

作为替代语法,您可以将值存储在数组中并使用array_sum()函数:

$numbers = [];
while (array_sum($numbers) != 100)
$numbers = [
rand(1, 100),
rand(1, 100),
rand(1, 100),
];
echo join(' + ', $numbers), ' = ', array_sum($numbers);
<?php
$valuesTotal = 0;
while ($valuesTotal != 100){
$value1 = rand(1, 100);
$value2 = rand(1, 100);
$value3 = rand(1, 100);
$valuesTotal = $value1+$value2+$value3;
echo "$value1 = $value1 :: $value2 = $value2 :: $value3 = $value3 :: $valuesTotal = $valuesTotal";
}
?>

另一种方式:

<?php
while (true){
$value1 = rand(1, 100);
$value2 = rand(1, 100);
$value3 = rand(1, 100);
$valuesTotal = $value1+$value2+$value3;
echo "$value1 = $value1 :: $value2 = $value2 :: $value3 = $value3 :: $valuesTotal = $valuesTotal";
if($valuesTotal == 100){
break;
}
}
?>

这应该给你一个想法,完成脚本可能需要几分之一秒,或者可能需要很长时间,这取决于你的运气!

您需要编写要在循环括号之间重复执行的代码,而不是在循环的顶部。

您只需要获得 2 个总和小于 100 的随机数,然后从 100 中减去该总和即可获得第 3 个随机随机数。此函数以简单的方式做到这一点:

function get_three_rand_numbs_sum_hundred(){
$num1 = rand(1, 99);  // Get first random number.
$num2 = rand(1, 99);  // Get second random number.
$num3 = 0; // Declare variable which will evnetually hold 3rd random number.
/* While the sum of the first 2 random numbers above is more than a 100,
get another random number for Number 2.*/
while(($num1 + $num2) >= 100){
$num2 = rand(1, 99);
}
// Get the 3rd random number by subtracting the sum of the first two from 100.
$num3 = 100 - ($num1 + $num2); 
echo "Number 1 : ".$num1."n";
echo "Number 2 : ".$num2."n";
echo "Number 3 : ".$num3."n";
echo "Sum : ".($num3+$num2+$num1)."n";
}

注意:rand() 函数将提供给它的 max 参数视为独占值,因此您应该使用 99 而不是 100,因为您确定您不希望仅从 1 个变量中获得 100。

随机化循环中的值,每次设置一个新值$valuestotal循环只有在$valuestotal = 100时才会停止。

$valuestotal = 0;
//
while ($valuestotal !== 100) {
echo $values;
echo '<br>';
echo $values2;
echo '<br>';
echo $values3;
echo "<br>";
$values = rand(1, 100);
$values2 = rand(1, 100);
$values3 = rand(1, 100);
echo $valuestotal . '<br>';
$valuestotal = $values + $values2 + $values3;
}
$arr = array();
$count = 53;    
$total = 500;
for ($i = 0; $i < $count; $i++)
{
$arr[] = 0;
}
for ($j = 0; $j < $total; $j++)
{
$arr[rand() % $count]++;
}
echo "<pre>";
print_r($arr);
echo "</pre>";

我假设您需要获得 3 个不同的随机值,其总和为 100

试试这个

$total = 100;
$val1 = rand(1,$total);
$val2 = rand(1, ($total-$val1));
$val3 = $total - ($val1 + $val2);
print($val1."n");
print($val2."n");
print($val3."n");

最新更新