这是我的代码如下。如果三个随机数之和等于100,代码本身就会回响。现在要将结果100作为$valuestotal
,我必须重新加载页面。但是每次重新加载页面时,我希望得到100的结果$valuestotal
。我怎么能这样做?
我认为循环中的循环是可能的。但它给出了相同的结果x次。我希望PHP继续尝试不同的随机值,当它达到$valuestotal
的值100时,它应该回显$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;
}
答案 0 :(得分:2)
您不需要在循环内循环。例如,您可以这样做:
<?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
答案 1 :(得分:2)
在while
循环中,只要条件为,就会执行该块
真正。所以你可以想一想,你有多少次执行,以及
什么时候应该停止?
多次执行需要的是随机收集 数:
while ( ... ) {
# roll dice, save numbers
}
现在,当sum为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);
答案 2 :(得分:1)
您只需要获得总计小于100的2个随机数,然后从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,因为您确定不需要100来自100变量
答案 3 :(得分:1)
另一种可能的方法。代码比其他一些答案稍微复杂一点,但我想添加一种只需要循环一次的方法。
$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
是有的,所以它不会随机减去太多,因为剩下的重复剩余就足够了。
答案 4 :(得分:0)
<?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;
}
}
?>
这应该给你一个想法,完成脚本可能需要几分之一秒,或者它可能需要永远,这取决于你的运气!
您需要编写代码以在循环的括号之间重复执行,而不是在它的顶部。
答案 5 :(得分:0)
将循环内的值随机化,每次将新值设置为$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;
}
答案 6 :(得分:-1)
我假设您需要获得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");