PHP小白到大牛直播班+Linux服务器(前30名)
作者信息

**熬夜选手

有偿投稿用户

视频教程分类
推荐视频教程
  • php程序员小白到大牛三个月集训php程序员小白到大牛三个月集训
  • Laravel 9 学习正当时—保姆级教程,想学不会都难!Laravel 9 学习正当时—保姆级教程,想学不会都难!
  • 千万级数据并发解决方案(理论+实战)千万级数据并发解决方案(理论+实战)
  • Laravel基础与实战(模块化)Laravel基础与实战(模块化)
  • UNI-APP开发(仿饿了么)UNI-APP开发(仿饿了么)
  • 首页 >后端开发 >php教程 > 正文

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

    原创2020-04-30 14:44:125311 关注公众号:每天精选资源文章推送

    什么是百钱百鸡?

    我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

    01.jpg

    翻译过来就是:

    公鸡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循环是很容易想到的,但是三重循环的复杂度太大了,所以应该想到减少循环。直接把小鸡用总的鸡数减去公鸡和母鸡,就能减少一层循环,这样就能减少运行的时间,提高代码效率。

    以上就是PHP百钱百鸡问题(三种解题思路及答案)的详细内容,更多请关注php中文网其它相关文章!

    PHP小白到大牛线上直播班第二十期

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

  • 相关标签:百钱百鸡
  • 相关文章

    相关视频


    专题推荐