java 穷举法_C++基本算法思想之穷举法
穷举算法(Exhaustive Attack method)是最简单的一种算法,其依赖于计算机的强大计算能力来穷尽每一种可能性,从而达到求解问题的目的。穷举算法效率不高,但是适应于一些没有规律可循的场合。
穷举算法基本思想穷举算法的基本思想就是从所有可能的情况中搜索正确的答案,其执行步骤如下:
(1)对于一种可能的情况,计算其结果。
(2)判断结果是否符合要求,如果不满足则执行第(1)步来搜索下一个可能的情况;如果符合要求,则表示寻找到一个正确答案。
在使用穷举法时,需要明确问题的答案的范围,这样才可以在指定的范围内搜索答案。指定范围之后,就可以使用循环语句和条件语句逐步验证候选答案的正确性,从而得到需要的正确答案。
穷举算法举例鸡兔同笼问题最早记载于1500年前的《孙子兵法》,这是一个非常有名的问题。鸡兔同笼的原文如下:
今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几只?
这个问题的大致意思是:在一个笼子里关着若干只鸡和若干只兔,从上面数共有35个头,从下面数共有94只脚。问笼中鸡和兔的数量各是多少?
穷举算法这个问题需要计算鸡的数量和兔的数量,我们通过分析可以知道鸡的数量应该在1~35之间。这样我们可以使用穷举法来逐个判断是否符合,从而搜索答案。
采用穷举法求解鸡兔同笼问题的程序示例代码如下:
/*
输入参数head是笼中头的总数,foot是笼中脚的总数,chicken是鸡的总数,rabbit是兔的总数
返回结果为0,表示没有搜索到符合条件的结果;
返回结果为1,表示搜索到了符合条件的结果
*/
int qiongju(int head,int foot,int *chicken,int * rabbit)
{
int re,i,j;
re=0;
for(i=0;i<=head,i++) //进行循环
{
j=head-i;
if(i*2+j*4==foot) //进行判断
{
re=1; //找到答案
*chicken=i;
*rabbit=j;
}
}
return re;
}
穷举算法求解鸡兔同笼问题完整的琼剧算法求解鸡兔同笼问题的程序代码如下:
#include
using namespace std;
/*
输入参数head是笼中头的总数,foot是笼中脚的总数,chicken是鸡的总数,rabbit是兔的总数
返回结果为0,表示没有搜索到符合条件的结果;
返回结果为1,表示搜索到了符合条件的结果
*/
int qiongju(int head,int foot,int *chicken,int * rabbit)
{
int re,i,j;
re=0;
for(i=0;i<=head;i++) //进行循环
{
j=head-i;
if(i*2+j*4==foot) //进行判断
{
re=1; //找到答案
*chicken=i;
*rabbit=j;
}
}
return re;
}
int main()
{
int chicken,rabbit,head,foot;
int re;
cout<
cout<
cin>>head;
cout<
cin>>foot;
re=qiongju(head,foot,&chicken,&rabbit);
if(re==1)
{
cout<
}
else
{
cout<
}
return 0;
}
程序中,首先由用户输入头的总数和脚的总数,然后调用穷举法求解鸡兔同笼问题的函数,最后输出结果。
执行该程序,按照题目的要求输入数据,输出结果。
java 穷举法_C++基本算法思想之穷举法相关推荐
- 算法设计之—直接 遍历/穷举法、贪心算法、动态规划、回溯法、EM方法
算法是对完成特定问题的程序执行序列描述,表象为从问题初始状态到问题结束状态的所有路径之中寻找可行路径,若无先验经验,根据执行方式不同可以划分为无规则和有规则(启发式)方法. 无规则方法为穷举,改进方法 ...
- 常见算法思想1:枚举法
一.枚举法 枚举算法的思想是:将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,保留合适的,丢弃不合适的. 使用枚举算法解题的基本思路如下所示: (1)确定枚举对象.枚举范围和判定条件. ...
- java蛮力法背包问题_[算法课]五种蛮力法解决01背包问题
文章目录 注明:题目要求只能使用蛮力法 算法标签:全排列,枚举,二进制,dfs,数组 题目简介 思路 AC代码 方法一:字符串蛮力 方法二:二进制枚举 方法三:DFS 三.2闫老板思考角度 方法四:全 ...
- 常见算法思想3:递归法
递归法 在计算机编程应用中,我们常常遇到代码的递归调用,事实上,递归是一种编程技巧,它是分治思想的一种重要体现.递归算法对解决大多数问题是十分有效的,它能够使算法的描述变得简洁而且易于理解. 从直观上 ...
- 八大算法思想二——递推法
聪明一点的递推法 递推法:犹如稳重的老将,使用的就是"稳扎稳打"的策略,不断利用现有的信息推导出新的东西,在日常使用中有两种方法: 1,顺推法:从已知的条件出发,逐步推导得到解决问 ...
- JAVA工程师常用算法_算法工程师必须要知道的8种常用算法思想
算法思想有很多,业界公认的常用算法思想有8种,分别是枚举.递推.递归.分治.贪心.试探法.动态迭代和模拟.当然8种只是一个大概的划分,是一个"仁者见仁.智者见智"的问题. 1.1 ...
- 回溯法 -数据结构与算法
1.回溯法算法思想: 定义: 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术 ...
- 常见的算法思想(整理)
1.算法特征 算法的英文名称是Algorithm,这个词在1957年之前在Webster's New World Dictionary(<韦氏新世界词典>)中还未出现,只能找到带有它的古代 ...
- 软件设计师 - 算法思想
文章目录 递归和迭代 软考常见算法思想 分治法 回溯法 贪心法 动态规划法 递归和迭代 递归:函数不断的调用自己,存在终止条件,分为递推和回归两部分: 迭代:不断用变量的旧值递推新值的过程,当前保存的 ...
最新文章
- linux sudo命令错误 is not in the sudoers file
- Kotlin 与 Java有什么区别(最全最新的)
- python电子相册制作软件下载_艾奇KTV电子相册制作软件
- linux初学者-软件安装与管理篇
- iOS clang: error: linker command failed with exit code 1 (use -v to see invocation)
- 计算机四级数据库教程,全国计算机等级考试四级教程—数据库工程师[借鉴].pdf...
- python 邮件抄送是什么意思_python 获取邮件中的发件人From、收件人To、抄送人Cc...
- 实时报价查询系统C++编程实现(阿里面试题改编)
- 笔记本电脑 编程_如何选择笔记本电脑进行编程
- 用html和css制作日历,CSS3制作日历
- 解决微信公众平台IP白名单
- linux qt中文输入法,解决 Ubuntu 14.04 下 Qt5 中文显示和中文输入法问题
- android脚本实现自动捉妖,一起来捉妖自动捉妖
- 小米手机系统好牛,真是国产系统的佼佼者
- java——配置环境变量
- TP Link WN726N ubuntu18安装成功
- 写专利还是比较辛苦的
- 计算机表格中考核级别如何算,计算机校级考核标准.doc
- 全国计算机等级考试超级模拟软件答案,全国计算机等级考试超级模拟软件app
- 压缩包文件的解压密码忘记了怎么办?