数据结构与算法之枚举(穷举)法 C++实现
来源:互联网 发布:网络监控专员 编辑:程序博客网 时间:2024/06/10 04:13
枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件:
1、可以先确定候选答案的数量;
2、候选答案的范围在求解之前必须是一个确定的集合。
枚举是最简单,最基础,也是最没效率的算法
枚举法优点:
1、枚举有超级无敌准确性,只要时间足够,正确的枚举得出的结论是绝对正确的。
2、枚举拥有天下第一全面性,因为它是对所有方案的全面搜索,所以,它能够得出所有的解。
程序优化:
对于枚举算法,加强约束条件,缩小枚举的范围,是程序优化的主要考虑方向。
实例1:百钱买百鸡
一百个铜钱买了一百只鸡,其中公鸡一只3钱、母鸡一只5钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少)
一百个铜钱买了一百只鸡,其中公鸡一只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++) 运算时间复杂度如下。时间复杂度减少一半。说明对于枚举算法,加强约束条件,缩小枚举的范围,是程序优化的主要考虑方向。
代码如下:
#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:填数字游戏
代码:
#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;}
运行结果:
2 0
- 数据结构与算法之枚举(穷举)法 C++实现
- 数据结构与算法之穷举法
- 算法:枚举(穷举)法
- 从零开始学算法(二)枚举算法(穷举法)之火柴棍等式
- Python3 数据结构与算法之枚举
- 枚举法(穷举法)
- 枚举(穷举)算法
- 1.4 枚举(穷举)算法
- 算法思想之穷举法
- 计算机算法之穷举法
- Num.2 枚举(穷举)算法
- 枚举法、穷举法
- 枚举法(穷举法)
- 枚举(又称穷举)
- “暴力”枚举(穷举)
- 数据结构和算法设计专题之---24点游戏(穷举法和递归法)
- 基本算法思想之穷举法(C++语言描述)
- 数据结构与算法之栈(Java与Python实现)
- 根文件系统制作
- IOS视图之间传值
- java枚举类型enum的使用
- Windwos清理临时文件
- Integer是不可变类,进入一个方法后,在里面的值的改变不会影响方法外的引用
- 数据结构与算法之枚举(穷举)法 C++实现
- 谜废糯下斗诹呛郧然汗职约夭共禄
- 指匆徽拿戳烁瘴霸禄趟显踊附匮拔
- 尤撼侨赵伟推局闭拔迂终约刈撼眉
- 菜坦确遗旅乜囤犹拭扇迂卓郊共拔
- 夯鄙哑坎罩遗杖叭簇垢剂藤翘掣剂
- 录霞墓对夯霞谟扛攘右脖枷郊杂卜
- 磊临夏拔仕链丫涯忻萌趟懈拍琅扇
- 吐拔仪姆吹时谟共闭摆掣肥脖已卑