C++ 算法设计:鸡兔同笼问题的多种求解方法
问题:
今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?编程求雉兔各几何。
解法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++ 算法设计:鸡兔同笼问题的多种求解方法相关推荐
- php设计鸡兔同笼问题解法,数量关系解题技巧:三种方法巧解鸡兔同笼问题
[导读] 中公事业单位为帮助各位考生顺利通过事业单位招聘考试!今天为大家带来数量关系解题技巧:三种方法巧解鸡兔同笼问题. 鸡兔同笼问题是事业单位考试中比较常见的一种题型,题干特征非常明显,解题方法多样 ...
- 经典算法:鸡兔同笼问题
初学算法用java语言暴力破解了这个问题.有不足之处还望大佬指教 /* * 鸡兔同笼问题 已知头的数目为50 脚的数目为120 求鸡和兔子的数量 */ public static void sop() ...
- 穷举算法(鸡兔同笼问题)
穷举算法的基本思想就是从所有可能的情况中搜索正确的答案,其执行步骤如下: (1)对于一种可能的情况,计算其结果. (2)判断结果是否满足要求,如果不满足则进行执行第(1)步来搜索下一个可能的情况:如果 ...
- php设计鸡兔同笼问题解法,鸡兔同笼问题4种解题方法
鸡兔同笼解题方法: 1,假设法 设全是鸡,则兔的只数为: (总头数×2--总脚数)÷2 设全是兔,则鸡的只数为: (总头数x4--总脚数)÷2 总只数--鸡只数=兔只数 基本原理:总头数x2如果=总 ...
- 算法练习-鸡兔同笼问题
经典鸡和兔同笼问题 根据鸡和兔子的总数和他们腿的总数, 求出鸡和兔的数量. 题目: 现在在一个笼子里有鸡和兔子,他们的数量一共有55只, 鸡腿数和兔子的腿数加起来有188条, 求鸡有多少只,兔子有多少 ...
- 算法入门|鸡兔同笼AC2
问题描述 一个笼子里面关了鸡和兔子(鸡有 2 只脚,兔子有 4 只脚,没有例外).已经知道了笼子里面脚的总数 a,问笼子里面至少有多少只动物,至多有多少只动物 输入数据 第 1 行是测试数据的组数 n ...
- 利用计算机解决古代数学问题鸡兔同笼,古代趣味数学:鸡兔同笼的4种算法,你都能看懂吗?...
鸡兔同笼是中国古代的数学名题之一,出自<孙子算经>.书中是这样叙述的:"今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?"这四句话的意思是:有若干只鸡兔同在一个 ...
- 穷举算法——鸡兔同笼问题
#include<stdio.h> int qiongju(int head,int foot,int *chicken,int *rabbit) {int re,i,j;re=0;for ...
- 算法-经点问题(鸡兔同笼,麦克劳林求pi,开灯问题)
1.鸡兔同笼问题 //已经鸡和兔的总数量为n 总腿数为m 输入 n,m 输出鸡和兔的数量 //分析:设鸡a只 兔b只 a+b=n 2a+4b=m a=(4n-m)/2 b=n-a //鸡兔同笼 voi ...
最新文章
- 清华贵系的期末大作业:奋战三周,造台计算机!
- 云原生时代,Kubernetes让应用落地的N种招式(附PPT)
- 历经3年的打磨,数据构建及管理平台Dataphin增加了什么新功能?
- 浙江师范大学python试卷_2014考研计算机真题试卷及答案(浙江师范大学考点)
- js 调用服务器端方法总结
- 有了bootstrap,为什么还要做amaze ui
- Java业务面考什么_Java程序员面试技巧分享,面考官考查JAVA程序员常用的技术有哪些?...
- iis7 您无权使用所提供的凭据查看此目录或页面。_使用 Spring Cloud 和 Docker 轻松构建微服务架构!...
- ActiveX控件安装和IE安全设置之间的关系
- 2017省夏令营Day6
- oracle 级联外键约束,Oracle 外键的相关约束中级联删除的方案
- android studio for android learning (二十三 )Android Orientation Sensor(方向传感器)与指南针实战(新方法替代orientation)
- 阅读 深入理解JVM虚拟机笔记一
- 盘点下玩过的解谜游戏
- 基于SSM超市订单管理系统(MYSQL版)
- 使用Qt给微信头像添加国旗
- html设置成电脑桌面背景,电脑桌面背景怎么更换 电脑桌面背景不能设置怎么办...
- 江苏发展大会上有哪些科技界大佬,他们的“隐私”你知道多少?
- appinventor跑酷游戏_基于APPInventor的一款益智游戏的设计与实现
- Java设计一个类代表二维空间的一个点,设计一个类代表二维空间的一个圆,计算面积,,并写程序验证计算一个点(Point对象)是否在圆(Cricle对象)内