设共有40只腿 15只头 
<?php
$a=40;
$b=15;
for($m=1;$m<=20;$m++){
$j=$m*2;
$a-=$j;
for($n=1;$n<=10;$n++){
$k=$n*4;
$a-=$k;
if($a==0&&($b-$m-$n=0))
{echo $m.$n;}}}
?>
这样写错误在?思路是蛮力算法

解决方案 »

  1.   

    $a=40;
    $b=15;function foo($a,$b) {
       for($x = 1; $x <= 14; $x ++) {
          $y = $b - $x;
          if ($x * 4 + $y * 2 == 40) return array($x,$y);
       }
       return false;
    }$result = foo($a,$b);
    if (!$result) echo '无解';
    else echo "兔:{$result[0]}鸡:{$result[1]}";
      

  2.   

    内循环的 $a-=$k; 是错误的for($m=1;$m<=20;$m++) {
      for($n=1;$n<=10;$n++) {
        if(($m*2+$n*4) == 40 && ($m+$n)==15) {
          echo "m=$m n=$n";
        }
      }
    }
      

  3.   

    看注释。$a=40;
    $b=15;
    for($m=1;$m<=20;$m++){
    $j=$m*2;
    $a-=$j;
    for($n=1;$n<=10;$n++){
    $k=$n*4;
    $a-=$k;
    if($a==0&&($b-$m-$n==0)) //应为$b-$m-$n==0
    {echo $m." ".$n;}//尝试失败,应该恢复$a的值
    $a += $n*4;
    }//恢复$a的值
    $a += $m*2;
    }
      

  4.   

    google了一把,《孙子算经》中记载的算法(这孙子智商真是高啊):
    $a = 40;
    $b = 15;
    $x = $a / 2 - $b;
    $y = 15 - $x;
    echo "兔{$x}鸡{$y}";