枚举法的本质就是从全部候选答案中去搜索正确的解,使用该算法须要满足两个条件:
1、能够先确定候选答案的数量。
2、候选答案的范围在求解之前必须是一个确定的集合。
枚举是最简单。最基础。也是最没效率的算法
枚举法长处:
1、枚举有超级无敌准确性。仅仅要时间足够。正确的枚举得出的结论是绝对正确的。
2、枚举拥有天下第一全面性,由于它是对全部方案的全面搜索。所以,它可以得出全部的解。
程序优化:
对于枚举算法,加强约束条件,缩小枚举的范围。是程序优化的主要考虑方向。

实例1:百钱买百鸡

一百个铜钱买了一百仅仅鸡。当中公鸡一仅仅3钱、母鸡一仅仅5钱。小鸡一钱3仅仅,问一百仅仅鸡中公鸡、母鸡、小鸡各多少)
代码:
#include<iostream>
const int COCKPR = 3;
const int HENPR = 5;
const int CHICKS = 3; //原错误const double CHICKPR = 1/3; 1 3 为整形,1/3也为整形所以为0,又一次声明1钱能买3仅仅小鸡
void buyChicken(int money, int chooks);
int main()
{
int money = 100;
int chooks = 100;
buyChicken(money, chooks);
return 0;
}
void buyChicken(int money, int chooks)
{
using namespace std;
int MaxCock = money/COCKPR;
int MaxHen = money/HENPR;
int MaxChick = chooks;
int cock,hen,chick;
int count = 0;
for(cock=0; cock<= MaxCock; cock++)
{
for(hen=0; hen<=MaxHen; hen++)
{
for(chick=0; chick<=MaxChick; chick++)
{
if (0 == chick%3 && cock + hen + chick == chooks && COCKPR*cock + HENPR*hen + chick/CHICKS == money)
cout << "公鸡: " << cock << " 母鸡: " << hen << " 小鸡: " << chick << " 第 " << count << "有结果" <<endl;
count ++;
}
}
}
cout << "总共枚举多少次:" << count <<endl;
}
执行结果:

仅仅对小鸡的数量加入一个最小的起始值
函数里面加 int MinChick = chooks-MaxCock-MaxHen;

把最里层小鸡数量的for循环的起始条件改为小鸡最小值 for(chick=MinChick; chick<=MaxChick; chick++)

运算时间复杂度例如以下。

时间复杂度降低一半。说明对于枚举算法。加强约束条件。缩小枚举的范围,是程序优化的主要考虑方向。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3V1Z2xlMjAxMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

代码例如以下:

#include<iostream>
const int COCKPR = 3;
const int HENPR = 5;
const int CHICKS = 3; //原错误const double CHICKPR = 1/3; 1 3 为整形。1/3也为整形所以为0,又一次声明1钱能买3仅仅小鸡
void buyChicken(int money, int chooks);
int main()
{
int money = 100;
int chooks = 100;
buyChicken(money, chooks);
return 0;
}
void buyChicken(int money, int chooks)
{
using namespace std;
int MaxCock = money/COCKPR;
int MaxHen = money/HENPR;
int MaxChick = chooks;
int MinChick = chooks-MaxCock-MaxHen;
int cock,hen,chick;
int count = 0;
for(cock=0; cock<= MaxCock; cock++)
{
for(hen=0; hen<=MaxHen; hen++)
{
for(chick=MinChick; chick<=MaxChick; chick++)
{
if (0 == chick%3 && cock + hen + chick == chooks && COCKPR*cock + HENPR*hen + chick/CHICKS == money)
cout << "公鸡: " << cock << " 母鸡: " << hen << " 小鸡: " << chick << " 第 " << count << "有结果" <<endl;
count ++;
}
}
}
cout << "总共枚举多少次:" << count <<endl;
}


实例2:填数字游戏

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3V1Z2xlMjAxMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

代码:
#include<iostream>
int main()
{
using namespace std;
int t1,t2,t3,t4,t5;
for (t1=1; t1<=9; t1++)
{
for(t2=0; t2<=9; t2++)
{
for(t3=0; t3<=9; t3++)
{
for(t4=0; t4<=9; t4++)
{
for(t5=0; t5<=9; t5++)
{
if(t5*100000 + t5*10000 + t5*1000 + t5*100 + t5*10 + t5 == t5*t1 + t4*t1*10 + t3*t1*100 + t2*t1*1000 + t1 *t1*10000 )
{
cout << " 算的数值为: " << t1 << " 法的数值为: " << t2 << " 描的数值为: " <<t3 << " 述的数值为: " << t4 << " 题的数值为: " << t5<<endl;
cout << " " << t1 << " " << t2 << " " << t3 << " " << t4 << " " << t5 <<endl;
cout << "X " << t1<<endl;
cout << "________________\n";
cout << " " << t5 << " " << t5 << " " << t5 << " " << t5 << " " << t5 << " " << t5 <<endl;
}
}
}
}
}
}
return 0;
}
执行结果:


数据结构与算法之枚举(穷举)法 C++实现的更多相关文章

  1. 基本算法思想之穷举法(C++语言描述)

    穷举算法(Exhaustive Attack method)是最简单的一种算法,其依赖于计算机的强大计算能力来穷尽每一种可能性,从而达到求解问题的目的.穷举算法效率不高,但是适应于一些没有规律可循的场 ...

  2. 穷举法、for循环、函数、作用域、斐波那契数

    1.穷举法 枚举所有可能性,直到得到正确的答案或者尝试完所有值. 穷举法经常是解决问题的最实用的方法,它实现起来热别容易,并且易于理解. 2.for循环 for语句一般形式如下: for variab ...

  3. 通过穷举法快速破解excel或word加密文档最高15位密码

    1.打开文件 2.工具 --- 宏 ---- 录制新宏 --- 输入名字如 :aa 3.停止录制 ( 这样得到一个空宏 ) 4.工具 --- 宏 ---- 宏 , 选 aa, 点编辑按钮 5.删除窗口 ...

  4. for循环语句以及迭代法和穷举法

    循环语句: 四要素:初始条件,循环条件,状态改变,循环体 for(初始条件;循环条件;状态改变){ //循环体} 案例1:打印等腰直角三角形和菱形 左上三角 static void Main(stri ...

  5. C#4 for循环 迭代法 穷举法应用

    for()循环. 四要素: 初始条件,循环条件,状态改变,循环体. 执行过程: 初始条件--循环条件--循环体--状态改变--循环条件.... 注意:for的小括号里面分号隔开,for的小括号后不要加 ...

  6. C# for 循环 迭代法 穷举法

    for()循环. 四要素: 初始条件,循环条件,状态改变,循环体. 执行过程: 初始条件--循环条件--循环体--状态改变--循环条件.... 注意:for的小括号里面分号隔开,for的小括号后不要加 ...

  7. 【2-24】for循环嵌套,跳转语句,异常语句,穷举法、迭代法

    For循环嵌套与if嵌套相似,是在for中再套for,其结构如下: For(;;) { For(;;){} }经典题型为打印星星例: Console.Write("请输入一个奇数:" ...

  8. C# 异常语句 跳转语句 while循环 穷举法 迭代法

    一  异常语句   ♦ try.....catch....finally 结构形式 try{ 可能会出错的代码语句 如果这里出错了,那么不会在继续下面的代码,而是直接进入catch中处理异常}catc ...

  9. python 穷举法 算24点(史上最简短代码)

    本来想用回溯法实现 算24点.题目都拟好了,就是<python 回溯法 子集树模板 系列 -- 7.24点>.无奈想了一天,没有头绪.只好改用暴力穷举法. 思路说明 根据四个数,三个运算符 ...

  10. HDU 1017 A Mathematical Curiosity【看懂题意+穷举法】

    //2014.10.17    01:19 //题意: //先输入一个数N,然后分块输入,每块输入每次2个数,n,m,直到n,m同一时候为零时  //结束,当a和b满足题目要求时那么这对a和b就是一组 ...

随机推荐

  1. EventBus 3.0: 入门使用及其使用 完全解析

    前言 EventBus是greenrobot再Android平台发布的以订阅-发布模式为核心的开源库. EventBus翻译过来是事件总线意思.可以这样理解:一个个(event)发送到总线上, 然后E ...

  2. Codeforces 583 DIV2 GCD Table 贪心

    原题链接:http://codeforces.com/problemset/problem/583/C 题意: 大概就是给你个gcd表,让你还原整个序列. 题解: 由$GCD(a,a)=a$,我们知道 ...

  3. TiKV 源码解析系列——Placement Driver

    https://zhuanlan.zhihu.com/p/24809131?refer=newsql

  4. WinForm 读取Excel 数据显示到窗体中

    最近教学中,需要用到WinForm 读取Excel数据,于是就做了一个简单的,废话不多说,直接codding... //读取Excel的帮助类 class SqExcellHelper { publi ...

  5. 关于Sending build context to Docker daemon 数据很大的问题

    以往进行docker build的时候都是在新建的文件夹下面进行,这次为了图方便,就直接放在开发根目录下进行build,这样子问题就来了.于是就有了下面的文件大小发送量: Sending build ...

  6. SecureCRT设置超级终端

    SecureCRT可以代替Windows中的超级终端,用来连接网络设备的Console口新建连接Serial串口,配置为:Bits per second: 9600Data bits: 8Parity ...

  7. Dedecms文章内容页和图片集内容页,调用缩略图的方法

    文章内容页缩略图的调用,图片集内容页缩略图的调用,相信大家都想找这个,对于初学者来说,一大福音> 文章内容页和图片集内容页,缩略图的调用.适合内页中调用. 1 <img src=" ...

  8. hdu1017(C++)

    这个题目很水,但是卡了格式和m=0的情况,wa了好多次,题目只给出N=1,感觉没说清楚 #include<iostream>using namespace std;int main(){ ...

  9. 【音乐App】—— Vue-music 项目学习笔记:歌曲列表组件开发

    前言:以下内容均为学习慕课网高级实战课程的实践爬坑笔记. 项目github地址:https://github.com/66Web/ljq_vue_music,欢迎Star. 当前歌曲播放列表 添加歌曲 ...

  10. GlusterFS源代码解析 —— GlusterFS 内存分配方式

    原文地址:http://blog.csdn.net/wangyuling1234567890/article/details/24564891 GlusterFS 的内存分配主要有两种方式,一种是内存 ...