基本算法思想之穷举法(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<iostream>
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<<"穷举法求解鸡兔同笼问题:"<<endl;
cout<<"请输入头数:";
cin>>head;
cout<<"请输入脚数:";
cin>>foot;
re=qiongju(head,foot,&chicken,&rabbit);
if(re==1)
{
cout<<"鸡有"<<chicken<<"只,兔有"<<rabbit<<"只。"<<endl;
}
else
{
cout<<"无法求解!"<<endl;
}
return 0;
}
程序中,首先由用户输入头的总数和脚的总数,然后调用穷举法求解鸡兔同笼问题的函数,最后输出结果。
执行该程序,按照题目的要求输入数据,输出结果。
基本算法思想之穷举法(C++语言描述)的更多相关文章
- 通过穷举法快速破解excel或word加密文档最高15位密码
1.打开文件 2.工具 --- 宏 ---- 录制新宏 --- 输入名字如 :aa 3.停止录制 ( 这样得到一个空宏 ) 4.工具 --- 宏 ---- 宏 , 选 aa, 点编辑按钮 5.删除窗口 ...
- for循环语句以及迭代法和穷举法
循环语句: 四要素:初始条件,循环条件,状态改变,循环体 for(初始条件;循环条件;状态改变){ //循环体} 案例1:打印等腰直角三角形和菱形 左上三角 static void Main(stri ...
- C#4 for循环 迭代法 穷举法应用
for()循环. 四要素: 初始条件,循环条件,状态改变,循环体. 执行过程: 初始条件--循环条件--循环体--状态改变--循环条件.... 注意:for的小括号里面分号隔开,for的小括号后不要加 ...
- C# for 循环 迭代法 穷举法
for()循环. 四要素: 初始条件,循环条件,状态改变,循环体. 执行过程: 初始条件--循环条件--循环体--状态改变--循环条件.... 注意:for的小括号里面分号隔开,for的小括号后不要加 ...
- 【2-24】for循环嵌套,跳转语句,异常语句,穷举法、迭代法
For循环嵌套与if嵌套相似,是在for中再套for,其结构如下: For(;;) { For(;;){} }经典题型为打印星星例: Console.Write("请输入一个奇数:" ...
- 穷举法、for循环、函数、作用域、斐波那契数
1.穷举法 枚举所有可能性,直到得到正确的答案或者尝试完所有值. 穷举法经常是解决问题的最实用的方法,它实现起来热别容易,并且易于理解. 2.for循环 for语句一般形式如下: for variab ...
- C# 异常语句 跳转语句 while循环 穷举法 迭代法
一 异常语句 ♦ try.....catch....finally 结构形式 try{ 可能会出错的代码语句 如果这里出错了,那么不会在继续下面的代码,而是直接进入catch中处理异常}catc ...
- python 穷举法 算24点(史上最简短代码)
本来想用回溯法实现 算24点.题目都拟好了,就是<python 回溯法 子集树模板 系列 -- 7.24点>.无奈想了一天,没有头绪.只好改用暴力穷举法. 思路说明 根据四个数,三个运算符 ...
- HDU 1017 A Mathematical Curiosity【看懂题意+穷举法】
//2014.10.17 01:19 //题意: //先输入一个数N,然后分块输入,每块输入每次2个数,n,m,直到n,m同一时候为零时 //结束,当a和b满足题目要求时那么这对a和b就是一组 ...
随机推荐
- c#命名规则参考
命名规则参考:1.从组件类型名中移去T前缀.例如TButton变成Button.2.除了第一个元音,删去所有元音字母.例如,Button变成bttn,Edit变成edt.3.压缩双字母.例如,bttn ...
- chattr与lsattr命令详解
PS:有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了.chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的li ...
- 二分 连续上升子序列变形 UVA1471
最大上升子序列解法: 1.动规转移方程 2.(nlogn) #include<cstdio> #include<algorithm> using namespace std; ...
- 算法(Algorithms)第4版 练习 2.2.11(1)
实现关键代码: private static void sort(Comparable[] input, int lo, int hi) { if((lo+CUTOFF-1) >= hi) { ...
- Qt版权介绍:GPL, LGPL 以及 Commercial 授权
http://blog.csdn.net/changsheng230/article/details/6167933 Qt版权介绍:GPL, LGPL 以及 Commercial 授权 分类: Qt ...
- html5 + css3 + jQuery + 响应式布局设计
1. [代码][HTML]代码 <!DOCTYPE html><html dir="ltr" lang="zh-CN">< ...
- 仿联想商城laravel实战---5、无刷新的增删改查(动态页面更新的三种方式(html))
仿联想商城laravel实战---5.无刷新的增删改查(动态页面更新的三种方式(html)) 一.总结 一句话总结: 直接js增加删除修改html 控制器直接返回处理好的页面 用双向绑定插件比如vue ...
- SSAS——基础
一.Analysis Services Analysis Services是用于决策支持和BI解决方案的数据引擎.它提供报表和客户端中使用的分析数据. 它可在多用途数据模型中创建高性能查询结构,业务逻 ...
- 分享知识-快乐自己:Liunx 根目录结构
- POJ 2421 Constructing Roads(Kruskal算法)
题意:给出n个村庄之间的距离,再给出已经连通起来了的村庄.求把所有的村庄都连通要修路的长度的最小值. 思路:Kruskal算法 课本代码: //Kruskal算法 #include<iostre ...