设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP百钱百鸡问题三种解题思路及答案

发布时间:2022-06-24 14:01 所属栏目:121 来源:互联网
导读:什么是百钱百鸡? 我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何? PHP百钱百鸡问题(三种解题思路及答案) 翻译过来就是: 公鸡5元一只,母鸡3元一只,小鸡1元3只
  什么是百钱百鸡?
 
  我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
 
  PHP百钱百鸡问题(三种解题思路及答案)
 
  翻译过来就是:
 
  公鸡5元一只,母鸡3元一只,小鸡1元3只,100元买了100只鸡,问各多少只?
 
  下面利用PHP分三种方法来解决这个问题:
 
  第一种
 
  假设:
 
  如果公鸡1只,母鸡1只,小鸡1只,则总价为:......,不对。
 
  如果公鸡1只,母鸡1只,小鸡2只,则总价为:......,不对。
 
  如果公鸡1只,母鸡1只,小鸡3只,则总价为:......,不对。
 
  ...........................
 
  如果公鸡1只,母鸡2只,小鸡1只,则总价为:......,不对。
 
  如果公鸡1只,母鸡2只,小鸡2只,则总价为:......,不对。
 
  如果公鸡1只,母鸡2只,小鸡3只,则总价为:......,不对。
 
  .............................
 
  如果公鸡100只,母鸡100只,小鸡100只,则总价为:......,不对。
 
  这种编程思想叫做“穷举”,就是将所有可能的答案都罗列出来,然后挨个去验证。
 
  代码如下:
 
  <?php
  
  $count = 0;
  
  for($gongji = 0;$gongji <= 100;$gongji++){
  
  for ($muji=0; $muji <= 100; $muji++) {  
  
  for ($xiaoji=0; $xiaoji <= 100 ; $xiaoji++) {  
  
  if($gongji + $muji + $xiaoji ==100 && $gongji*5 +  
  
  $muji*3 + $xiaoji / 3 == 100){
  
    echo "<br>公鸡:$gongji,母鸡: $muji,小鸡: $xiaoji";
  
  }
  
  $count++;
  
  }
  
  }
  
  }
  
  echo "<br>".$count;
  结果:
 
  公鸡:0,母鸡: 25,小鸡: 75公鸡:4,母鸡: 18,小鸡: 78公鸡:8,母鸡: 11,小鸡: 81公鸡:12,母鸡: 4,小鸡: 841030301
 
  第二种
 
  代码如下:
 
  $count = 0;
  
  for($gongji = 0;$gongji <= 100 / 5;$gongji++){
  
  for ($muji=0; $muji <= 100 / 3; $muji++) {  
  
  $xiaoji = 100 - $gongji - $muji;
  
  if($gongji*5 + $muji*3 +$xiaoji / 3 == 100){
  
  echo "<br>公鸡:$gongji,母鸡: $muji,小鸡: $xiaoji";
  
  }
  
  $count++;
  
  }
  
  }
  
  echo "<br>".$count;
  结果:
 
  公鸡:0,母鸡: 25,小鸡: 75公鸡:4,母鸡: 18,小鸡: 78公鸡:8,母鸡: 11,小鸡: 81公鸡:12,母鸡: 4,小鸡: 84714
 
  第三种
 
  代码如下:
 
  $count = 0;
  
  for($gongji = 0;$gongji <= 100 / 5;$gongji++){
  
  for ($muji=0; $muji <= (100-$gongji*5) / 3; $muji++) {  
  
  $xiaoji = 100 - $gongji - $muji;
  
  if($gongji*5 + $muji*3 +$xiaoji / 3 == 100){
  
  echo "<br>公鸡:$gongji,母鸡: $muji,小鸡: $xiaoji";
  
  }
  
  $count++;
  
  }
  
  }
  
  echo "<br>".$count;
  结果:
 
  公鸡:0,母鸡: 25,小鸡: 75公鸡:4,母鸡: 18,小鸡: 78公鸡:8,母鸡: 11,小鸡: 81公鸡:12,母鸡: 4,小鸡: 84364
 
  总结:直接用三重for循环是很容易想到的,但是三重循环的复杂度太大了,所以应该想到减少循环。直接把小鸡用总的鸡数减去公鸡和母鸡,就能减少一层循环,这样就能减少运行的时间,提高代码效率。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读