php趣味100例 - php天平称物
(php,php趣味,php编程,php穷举法,php for循环的运用)
<?php
/*
天平称物
4个砝码:总质量是40克。砝码的重量是整数。各不相等
这个组合可以称出1-40克的任意重量
w1,w2,w3,w4
w1+w2+w3+w4=40
w1!=w2!=w3!=w4
穷举法
这个组合可以称出1-40任意的重量
w 为任意重量(在1-40之间)
a1*w1+a2*w2+a3*w3+a4*w4 = W
a1~a4 在1 0 -1之间取值
比如如果要称重要为8的话
a1*w1+a2*w2+a3*w3+a4*w4 = 8
$flag=1表示可以40以内任意的值 0表示不能
穷举法
*/
header("Content-Type: text/html; charset=utf-8");
?>
<?php
$w1=0;$w2=0;$w3=0;$w4=0;$w=0;
for($w1=1;$w1<=40;$w1++){
for($w2=$w1+1;$w2<=40-$w1;$w2++){
for($w3=$w2+1;$w3<=40-$w2-$w1;$w3++){
if(($w4=40-$w1-$w2-$w3)>=$w3){
if($w1!=$w2 && $w2!=$w3 && $w3!=$w4 && $w4!=$w1){
for($w =1,$flag=1;$w<41&&$flag==1;$w++){//默认是1
for($a1=1,$flag=0;$a1>-2;$a1--){//设成0
for($a2=-1;$a2<2;$a2++){
for($a3=-1;$a3<2;$a3++){
for($a4=-1;$a4<2;$a4++){
if( ($a1*$w1+$a2*$w2+$a3*$w3+$a4*$w4) == $w ){
//echo $w.'='.$a1.'*'.$w1.' + '.$a2.'*'.$w2.' + '.$a3.'*'.$w3.' + '.$a4.'*'.$w4.'<br />';
$flag =1;//如果能相等就设为1
}
}
}
}
}
}
if($flag==1){
echo '四个砝码:'.$w1.' '.$w2.' '.$w3.' '.$w4;
}
}
}
}
}
}
//
?>