PHP经典题:百钱百鸡问题(穷举算法)

百钱百鸡问题:

已知:公鸡5元一只,母鸡3元一只,小鸡一元3只

现用100元钱买了100只鸡,问:公鸡母鸡小鸡各几只?

--请考虑尽可能高效的方法

思路:

如果有0只公鸡,0只母鸡,1只小鸡,数量是100吗?价钱是100吗? 否

如果有0只公鸡,0只母鸡,2只小鸡,数量是100吗?价钱是100吗? 否

如果有0只公鸡,0只母鸡,3只小鸡,数量是100吗?价钱是100吗? 否

......

如果有0只公鸡,0只母鸡,100只小鸡,数量是100吗?价钱是100吗? 否

如果有0只公鸡,1只母鸡,1只小鸡,数量是100吗?价钱是100吗? 否

如果有0只公鸡,1只母鸡,2只小鸡,数量是100吗?价钱是100吗? 否

......

如果有0只公鸡,1只母鸡,100只小鸡,数量是100吗?价钱是100吗? 否

如果有0只公鸡,2只母鸡,1只小鸡,数量是100吗?价钱是100吗? 否

......

如果有100只公鸡,100只母鸡,0只小鸡,数量是100吗?价钱是100吗? 否

如果有100只公鸡,100只母鸡,1只小鸡,数量是100吗?价钱是100吗?否

如果有100只公鸡,100只母鸡,2只小鸡,数量是100吗?价钱是100吗?否

......

这就叫做:穷举思想 (就是将所以可能的情况挨个去测试)

PHP代码:

echo "

原始思路:";

$count = 0;

for($gongji = 0; $gongji <= 100; ++$gongji) {

for($muji = 0; $muji <= 100; ++$muji) {

for($xiaoji = 0; $xiaoji <= 100; ++$xiaoji) {

if($gongji*5 + $muji*3 + $xiaoji/3 == 100 && $gongji + $muji + $xiaoji == 100) {

echo "

公鸡有 $gongji 只;母鸡有 $muji 只;小鸡有 $xiaoji 只;";

}

$count++;//计算次数

}

}

}

echo "

次数:$count";

echo '

';

echo "

代码优化一:";

$count = 0;

for($gongji = 0; $gongji <= 100; ++$gongji) {

for($muji = 0; $muji <= 100; ++$muji) {

$xiaoji = 100 - $gongji - $muji;

if($gongji*5 + $muji*3 + $xiaoji/3 == 100) {

echo "

公鸡有 $gongji 只;母鸡有 $muji 只;小鸡有 $xiaoji 只;";

}

$count++;//计算次数

}

}

echo "

次数:$count";

echo '

';

echo "

代码优化二:";

$count = 0;

for($gongji = 0; $gongji <= 100/5; ++$gongji) { //根据总价:则公鸡最多有100/5只

for($muji = 0; $muji <= 100/3; ++$muji) { //根据总价:则母鸡最多有100/3只

$xiaoji = 100 - $gongji - $muji;

if($gongji*5 + $muji*3 + $xiaoji/3 == 100) {

echo "

公鸡有 $gongji 只;母鸡有 $muji 只;小鸡有 $xiaoji 只;";

}

$count++;//计算次数

}

}

echo "

次数:$count";

echo '

';

echo "

代码优化三:";

$count = 0;

for($gongji = 0; $gongji <= 100/5; ++$gongji) { //根据总价:则公鸡最多有100/5只

for($muji = 0; $muji <= (100-$gongji*5)/3; ++$muji) { //根据总价与公鸡所花的钱:则母鸡最多有(100-$gongji*5)/3只

$xiaoji = 100 - $gongji - $muji;

if($gongji*5 + $muji*3 + $xiaoji/3 == 100) {

echo "

公鸡有 $gongji 只;母鸡有 $muji 只;小鸡有 $xiaoji 只;";

}

$count++;//计算次数

}

}

echo "

次数:$count";

echo '

';

echo "

代码优化四:";

$count = 0;

for($gongji = 0; $gongji <= 100/5; ++$gongji) { //根据总价:则公鸡最多有100/5只

for($muji = 0; $muji <= (100-$gongji*5)/3; ++$muji) { //根据总价与公鸡所花的钱:则母鸡最多有(100-$gongji*5)/3只

$xiaoji = 100 - $gongji - $muji;

if($xiaoji % 3 != 0) {continue;}//考虑小鸡的价钱,则小鸡的数量只能被3整除才合理

if($gongji*5 + $muji*3 + $xiaoji/3 == 100) {

echo "

公鸡有 $gongji 只;母鸡有 $muji 只;小鸡有 $xiaoji 只;";

}

$count++;//计算次数

}

}

echo "

次数:$count";

输出的结果及计算次数:

原始思路:

公鸡有 0 只;母鸡有 25 只;小鸡有 75 只;

公鸡有 4 只;母鸡有 18 只;小鸡有 78 只;

公鸡有 8 只;母鸡有 11 只;小鸡有 81 只;

公鸡有 12 只;母鸡有 4 只;小鸡有 84 只;

次数:1030301

代码优化一:

公鸡有 0 只;母鸡有 25 只;小鸡有 75 只;

公鸡有 4 只;母鸡有 18 只;小鸡有 78 只;

公鸡有 8 只;母鸡有 11 只;小鸡有 81 只;

公鸡有 12 只;母鸡有 4 只;小鸡有 84 只;

次数:10201

代码优化二:

公鸡有 0 只;母鸡有 25 只;小鸡有 75 只;

公鸡有 4 只;母鸡有 18 只;小鸡有 78 只;

公鸡有 8 只;母鸡有 11 只;小鸡有 81 只;

公鸡有 12 只;母鸡有 4 只;小鸡有 84 只;

次数:714

代码优化三:

公鸡有 0 只;母鸡有 25 只;小鸡有 75 只;

公鸡有 4 只;母鸡有 18 只;小鸡有 78 只;

公鸡有 8 只;母鸡有 11 只;小鸡有 81 只;

公鸡有 12 只;母鸡有 4 只;小鸡有 84 只;

次数:364

代码优化四:

公鸡有 0 只;母鸡有 25 只;小鸡有 75 只;

公鸡有 4 只;母鸡有 18 只;小鸡有 78 只;

公鸡有 8 只;母鸡有 11 只;小鸡有 81 只;

公鸡有 12 只;母鸡有 4 只;小鸡有 84 只;

次数:121

百钱百鸡php穷举法,PHP经典题:百钱百鸡问题(穷举算法)相关推荐

  1. 穷举法求经典数学问题(鸡和兔)

    /*公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱 用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱.*/ #include<stdio.h ...

  2. 五家共井 穷举法_经典算法题——五家共井

    古代数学巨著<九章算数>中有这么一道题叫"五家共井,甲二绠(汲水用的井绳)不足,如(接上)乙一绠:乙三绠不足,如丙一绠: 丙四绠不足,如丁一绠:丁五绠不足,如戊一绠:戊六绠不足, ...

  3. 百鸡问题用计算机什么法解决,《穷举法解决问题》教学设计

    一.教学目标 1.知识与技能 ⑴了解穷举法的基本概念及用穷举法设计算法的基本过程. ⑵分析建立正确的数学模型,归纳穷举法穷举技巧. ⑶能够根据具体问题的要求,使用穷举法设计算法,编写程序求解问题. 2 ...

  4. 百钱买百鸡python编程列表推导式_使用循环和列表推导式两种方法求解百钱买百鸡问题。假设大鸡5元一只,中鸡3元一只,小鸡1元三只,现有100元钱想买100只鸡,有多少种买法?...

    [程序题]编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数 1/1+1/3+...+1/n [单选题]患者男,67岁.确诊为原发性支气管肺癌,为行手术 ...

  5. 算法设计思想(1)— 穷举法

    本文系 王晓华 老师 GitChat [算法应该怎么玩]课程笔记. 1. 穷举法概念 穷举法又称穷举搜索法,是一种在问题域的解空间中对所有可能的解穷举搜索,并根据条件选择最优解的方法的总称. 数学上也 ...

  6. 常用算法总结(穷举法、贪心算法、递归与分治算法、回溯算法、数值概率算法)

    博主联系方式: QQ:1540984562 微信:wxid_nz49532kbh9u22 QQ交流群:892023501 目录 1.穷举法 2.贪心算法 3.递归与分治算法 4.回溯算法 5.数值概率 ...

  7. 第1-6课:算法设计常用思想之穷举法

    这一课我们来介绍穷举法,有一些人把穷举法视为上不了台面的低级方法,这种想法是错误的,虽然穷举思想的原理简单,但是用穷举思想设计一个算法却一点也不简单.各种算法模式或思想没有高下之分,关键在于你是否能灵 ...

  8. 数模算法-网格算法和穷举法

    网格算法和穷举法一样,只是网格法是连续问题的穷举. 比如要求在 N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点, 比如在 [ a; b ] 区间内取 M +1 个点,就是 a; a + ...

  9. 常见算法思想——穷举法

    常见算法思想--穷举算法 简单介绍 详细介绍 算法思路 算法特点 算法优化 实例演示 题目描述 题目分析 完整代码 简单介绍   在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结 ...

最新文章

  1. 布加迪、劳斯莱斯和宾利零售商开始接受BTC和BCH付款
  2. 动态绘制圆环和扇形的源代码
  3. JavaScript的基础
  4. input file 获取不到Request.Files 解决办法
  5. OneAPM挂牌新三板,续写ITOM新篇章
  6. 前端学习(1931)vue之电商管理系统电商系统之美化一层循环的UI结构删除业务逻辑实现分配权限的对话框实现
  7. 二叉排序树的删除操作
  8. nodpad 设置护眼_Notepad++更改背景颜色(护眼色)
  9. 深入解析:Row Movement 的原理和性能影响与关联
  10. 项目杂-备注-说明-其他
  11. JavaScript 引擎 V8 新机制:JIT-less
  12. oracle主机修改IP后客户端无法连接
  13. ZZULIOJ.1101: 逆序数字(函数专题)
  14. 大一c语言程序考试常考程序题,大一c语言考试试题[1]
  15. 第01课:敏捷教练和 ScrumMaster 基本功四部曲(iPad 版)
  16. Evasion Attack in Adversarial Machine Learning
  17. SpringSecurity(安全)、Shiro简介
  18. adb如何在linux下安装目录,Linux下Android ADB驱动安装详解
  19. java虚拟机原理pdf_揭秘Java虚拟机 JVM设计原理与实现pdf
  20. Matlab绘制阶梯形图

热门文章

  1. 前端——使用JavaScript(jQuery)通过身份证号获取籍贯、生日、年龄、性别
  2. 《C++ Primer (5th Edition)》笔记-Part IV. Advanced Topics
  3. 微信小程序 音乐播放控件,监听播放事件, 音乐播放的基本实现
  4. Android BottomSheetDialog使用,实现网易云歌单底部弹窗
  5. 【大数据开发】SparkStreaming——DStream输入源、原语、SparkStream与Kafka和Redis三者的交互
  6. Nginx做负载均衡的模块
  7. 【Alpha】Scrum Meeting 5
  8. 开源办公OA开发平台使用说明:用车管理应用
  9. 英语--副词描述变化量大小
  10. 小波变换的matlab实现,维小波变换MATLAB实现