问题:

今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?编程求雉兔各几何。

解法1:人肉计算机
手工解方程,程序直接输出答案,这是最短的程序,没有之一。

#include <iostream>
using namespace std;
int main()
{cout << "chickens = 23" << endl;cout << "rabbits  = 12" << endl;return 0;
}

解法2:方程求解
当然,也可以让计算机解方程,省去手工计算的工作量。

#include <iostream>
using namespace std;
int main()
{int m = 35;int n = 94;/*x +  y = m2x + 4y = n*/int x = (4 * m - n) / 2;int y = m - x;cout << "chickens = " << x << endl;cout << "rabbits  = " << y << endl;return 0;
}

解法3:暴力搜索
再省点事,方程也不需要我们来变换,直接让计算机逐个答案试探,反正计算机计算速度快,只要我们少动脑筋就行。

#include <iostream>
using namespace std;int main()
{for (int x = 0; x <= 35; ++x){for (int y = 0; y <= 35; ++y){if (x + y == 35 && x * 2 + y * 4 == 94){cout << "chickens = " << x << endl;cout << "rabbits  = " << y << endl;return 0;}}}cout << "unsolvable!" << endl;return 0;
}

解法4:启发式搜索
其实上面的程序中,y不用循环,因为 y=35-x,这样只需要 x 循环 36 次就能把答案找出来,速度比上面提高 36 倍。尽管计算机速度很快,我们还是尽可能减少不必要的搜索工作。

#include <iostream>
using namespace std;
int main()
{for (int x = 0; x <= 35; ++x){int y = 35 - x;if (x * 2 + y * 4 == 94){cout << "chickens = " << x << endl;cout << "rabbits  = " << y << endl;return 0;}}cout << "unsolvable!" << endl;return 0;
}

解法5:随机求解
如果你对求x,y没思路,可以分析一下它们的取值范围,然后在取值范围内随机取值,然后检验一下这组随机值是否为符合答案要求,如果符合的话,问题就搞定了。

别看不起随机求解,很多复杂算法都用到了这种技巧,用的好的话,能解决很多无法用公式求解的难题。正所谓乱拳打死师傅啊!

#include <iostream>
using namespace std;
int main()
{while (true){int x = rand() % 36;int y = rand() % 36;if (x + y == 35 && 2 * x + 4 * y == 94){cout << "chickens = " << x << endl;cout << "rabbits  = " << y << endl;return 0;}}return 0;
}

解法6:烧脑筋求解方法
我觉得不炫耀一下技巧,显得太 low 了,用递归方法给出一段代码,慢慢烧脑筋去吧!

#include <iostream>
using namespace std;
int chickens(int m, int n)
{return 4 * m <= n ? 0 : 1 + chickens(m - 1, n - 2);
}
int main()
{cout << "chickens = " << chickens(35, 94) << endl;cout << "rabbits  = " << 35 - chickens(35, 94) << endl;return 0;
}

还可以利用 lambda表达式进一步化简,但对于初学者,意义不大了,有兴趣自己搞一下。

C++ 算法设计:鸡兔同笼问题的多种求解方法相关推荐

  1. php设计鸡兔同笼问题解法,数量关系解题技巧:三种方法巧解鸡兔同笼问题

    [导读] 中公事业单位为帮助各位考生顺利通过事业单位招聘考试!今天为大家带来数量关系解题技巧:三种方法巧解鸡兔同笼问题. 鸡兔同笼问题是事业单位考试中比较常见的一种题型,题干特征非常明显,解题方法多样 ...

  2. 经典算法:鸡兔同笼问题

    初学算法用java语言暴力破解了这个问题.有不足之处还望大佬指教 /* * 鸡兔同笼问题 已知头的数目为50 脚的数目为120 求鸡和兔子的数量 */ public static void sop() ...

  3. 穷举算法(鸡兔同笼问题)

    穷举算法的基本思想就是从所有可能的情况中搜索正确的答案,其执行步骤如下: (1)对于一种可能的情况,计算其结果. (2)判断结果是否满足要求,如果不满足则进行执行第(1)步来搜索下一个可能的情况:如果 ...

  4. php设计鸡兔同笼问题解法,鸡兔同笼问题4种解题方法

    ​鸡兔同笼解题方法: 1,假设法 设全是鸡,则兔的只数为: (总头数×2--总脚数)÷2 设全是兔,则鸡的只数为: (总头数x4--总脚数)÷2 总只数--鸡只数=兔只数 基本原理:总头数x2如果=总 ...

  5. 算法练习-鸡兔同笼问题

    经典鸡和兔同笼问题 根据鸡和兔子的总数和他们腿的总数, 求出鸡和兔的数量. 题目: 现在在一个笼子里有鸡和兔子,他们的数量一共有55只, 鸡腿数和兔子的腿数加起来有188条, 求鸡有多少只,兔子有多少 ...

  6. 算法入门|鸡兔同笼AC2

    问题描述 一个笼子里面关了鸡和兔子(鸡有 2 只脚,兔子有 4 只脚,没有例外).已经知道了笼子里面脚的总数 a,问笼子里面至少有多少只动物,至多有多少只动物 输入数据 第 1 行是测试数据的组数 n ...

  7. 利用计算机解决古代数学问题鸡兔同笼,古代趣味数学:鸡兔同笼的4种算法,你都能看懂吗?...

    鸡兔同笼是中国古代的数学名题之一,出自<孙子算经>.书中是这样叙述的:"今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?"这四句话的意思是:有若干只鸡兔同在一个 ...

  8. 穷举算法——鸡兔同笼问题

    #include<stdio.h> int qiongju(int head,int foot,int *chicken,int *rabbit) {int re,i,j;re=0;for ...

  9. 算法-经点问题(鸡兔同笼,麦克劳林求pi,开灯问题)

    1.鸡兔同笼问题 //已经鸡和兔的总数量为n 总腿数为m 输入 n,m 输出鸡和兔的数量 //分析:设鸡a只 兔b只 a+b=n 2a+4b=m a=(4n-m)/2 b=n-a //鸡兔同笼 voi ...

最新文章

  1. 清华贵系的期末大作业:奋战三周,造台计算机!
  2. 云原生时代,Kubernetes让应用落地的N种招式(附PPT)
  3. 历经3年的打磨,数据构建及管理平台Dataphin增加了什么新功能?
  4. 浙江师范大学python试卷_2014考研计算机真题试卷及答案(浙江师范大学考点)
  5. js 调用服务器端方法总结
  6. 有了bootstrap,为什么还要做amaze ui
  7. Java业务面考什么_Java程序员面试技巧分享,面考官考查JAVA程序员常用的技术有哪些?...
  8. iis7 您无权使用所提供的凭据查看此目录或页面。_使用 Spring Cloud 和 Docker 轻松构建微服务架构!...
  9. ActiveX控件安装和IE安全设置之间的关系
  10. 2017省夏令营Day6
  11. oracle 级联外键约束,Oracle 外键的相关约束中级联删除的方案
  12. android studio for android learning (二十三 )Android Orientation Sensor(方向传感器)与指南针实战(新方法替代orientation)
  13. 阅读 深入理解JVM虚拟机笔记一
  14. 盘点下玩过的解谜游戏
  15. 基于SSM超市订单管理系统(MYSQL版)
  16. 使用Qt给微信头像添加国旗
  17. html设置成电脑桌面背景,电脑桌面背景怎么更换 电脑桌面背景不能设置怎么办...
  18. 江苏发展大会上有哪些科技界大佬,他们的“隐私”你知道多少?
  19. appinventor跑酷游戏_基于APPInventor的一款益智游戏的设计与实现
  20. Java设计一个类代表二维空间的一个点,设计一个类代表二维空间的一个圆,计算面积,,并写程序验证计算一个点(Point对象)是否在圆(Cricle对象)内

热门文章

  1. 『津津乐道播客』#073. 洗碗机真的好用么?
  2. vant显示日期格式_Vant CountDown 倒计时
  3. html 德罗斯特效应,德罗斯特效应有尽头吗?怎么打造镜子无限循环现象
  4. 面经 - 小红书 数据分析师
  5. 一篇整理JDK8新特性
  6. 山西省万荣中学病毒性营销策划方案
  7. 关于H5页面点击a标签拉取QQ临时对话的问题
  8. word分散对齐调整宽度_Word两端对齐与分散对齐简要概述与实例比较
  9. 国二C语言:VC++2010学习版
  10. [转]短时间被动吸烟也会造成呼吸道伤害