c语言枚举法(穷举法).ppt

c语言枚举法(穷举法).ppt

ID:61967787

大小:288.50 KB

页数:18页

时间:2021-04-06

c语言枚举法(穷举法).ppt_第1页
c语言枚举法(穷举法).ppt_第2页
c语言枚举法(穷举法).ppt_第3页
c语言枚举法(穷举法).ppt_第4页
c语言枚举法(穷举法).ppt_第5页
资源描述:

《c语言枚举法(穷举法).ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、枚举法(穷举法)“笨人之法”:把所有可能的情况一一测试,筛选出符合条件的各种结果进行输出。分析:这是个不定方程——三元一次方程组问题(三个变量,两个方程)x+y+z=1005x+3y+z/3=100设公鸡为x只,母鸡为y只,小鸡为z只。百元买百鸡问题分析x+y+z=1005x+3y+z/3=100三重循环voidmain(){intx,y,z;for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++){if(x+y+z==100&&5*x+3*y+z/3==100)printf("x=%d,y=%d,z=%d",x,

2、y,z);}}结果:x=0,y=25,z=75x=4,y=18,z=78x=8,y=11,z=81x=12,y=4,z=84【讨论】为什么多了几组解??百元买百鸡问题分析voidmain(){intx,y,z;for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++){if(z%3==0&&x+y+z==100&&5*x+3*y+z/3==100)printf("x=%d,y=%d,z=%d",x,y,z);}}结果:x=0,y=25,z=75x=4,y=18,z=78x=8,y=11,z=81x=12,y=4,z=

3、84【讨论】此为“最笨”之法——要进行101×101×101=1030301次(100多万次)运算。优化voidmain(){intx,y,z;for(x=0;x<=100;x++)for(y=0;y<=100;y++){z=100-x-y;if(z%3==0&&5*x+3*y+z/3==100)printf("cocks=%d,hens=%d,chickens=%d",x,y,z);}}【讨论】令z=100-x-y只进行101×101=10201次运算(前者的1%)取x<=20,y<=33只进行21×34=714次运算(第1种运算的6.9e-4)继续优化voidmain

4、(){intx,y,z;for(x=0;x<=14;x++)for(y=0;y<=25;y++)if(7*x+4*y==100){z=100-x-y;printf("cocks=%d,hens=%d,chickens=%d",x,y,z);}}取x<=14,y<=25只进行15×26=390次运算利用穷举法求解趣味智力题(韩信点兵)韩信有一队兵,他想知道有多少人,便让士兵排队报数。按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。你知道韩信至少有多少兵吗

5、?设兵数为x,则x应满足:x%5==1&&x%6==5&&x%7==4&&x%11==10穷举法对x从1开始试验#includevoidmain(){intx;for(x=1;x<5000;x++){if(x%5==1&&x%6==5&&x%7==4&&x%11==10){printf("x=%d",x);}}}/*属于“瞎猫碰死耗子”的做法*/穷举法求解韩信点兵#includevoidmain(){intx;for(x=1;;x++){if(x%5==1&&x%6==5&&x%7==4&&x%11==10){printf("x=%d

6、n",x);}}}/*死循环——永远不会退出的循环*/穷举法求解韩信点兵穷举法求解韩信点兵:方案1-goto#includevoidmain(){intx;for(x=1;;x++){if(x%5==1&&x%6==5&&x%7==4&&x%11==10){printf("x=%d",x);gotoEND;}}END:;}穷举法求解韩信点兵:方案2-break#includevoidmain(){intx;for(x=1;;x++){if(x%5==1&&x%6==5&&x%7==4&&x%11==10){printf("x=%d"

7、,x);break;}}}穷举法求解韩信点兵:方案3-标志变量#includevoidmain(){intx;intfind=0;/*设置找到标志为假*/for(x=1;!find;x++){if(x%5==1&&x%6==5&&x%7==4&&x%11==10){printf("x=%d",x);find=1;}}}课堂讨论:谁做的好事?有四位同学中的一位做了好事,不留名,表扬信来了之后,校长问这四位是谁做的好事。A说:不是我。B说:是C。C说:是D。D说:C胡说。已知三个人说的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。