c语言枚举法(穷举法)课件
枚举法(穷举法);百元买百鸡问题分析;void main(){ int x,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\n",x,y,z); }};百元买百鸡问题分析;优化;;继续优化;利用穷举法求解趣味智力题;#include void main(){int x;for (x=1; x < 5000 ;x++){if (x%5==1 && x%6==5 && x%7==4 && x%11==10){printf(" x = %d\n", x); }}};#include void main(){int x;for (x=1; ;x++){if (x%5==1 && x%6==5 && x%7==4 && x%11==10){printf(" x = %d\n", x); }}} ;穷举法求解韩信点兵:方案1-goto;穷举法求解韩信点兵:方案2-break;穷举法求解韩信点兵:方案3-标志变量;课堂讨论:谁做的好事?
有四位同学中的一位做了好事,不留名,表扬信来了之后,校长问这四位是谁做的好事。 A说:不是我。 B说:是C。 C说:是D。 D说:C胡说。 已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事的人。;编程思路: 如何找到该人,一定是“先假设该人是做好事者,然后到每句话中去测试看有几句是真话”。“有三句是真话就确定是该人,否则换下一人再试”。 比如,先假定是A同学,让 thisman='A'; 代入到四句话中 A说:thisman!=‘A’;‘A’!=‘A’假,值为0。 B说:thisman==‘C’;‘A’==‘C’假,值为0。 C说:thisman==‘D’;‘A’==‘D’假,值为0。 D说:thisman!=‘D’;‘A’!=‘D’真,值为1。显然,不是'A'做的好事(四个关系表达式值的和为1);再试B同学,让thisman=‘B’;代入到四句话中A说:thisman!=‘A’;‘B’!=‘A’真,值为1。 B说:thisman==‘C’;‘B’==‘C’假,值为0。C说:thisman==‘D’;‘B’==‘D’假,值为0。D说:thisman!=‘D’;‘B’!=‘D’真,值为1。显然,不是'B'???为(四个关系表达式值的和为2);再试C同学,让thisman=‘C’;代入到四句话中A说:thisman!=‘A’;‘C’!=‘A’真,值为1。 B说:thisman==‘C’;‘C’==‘C’真,值为1。 C说:thisman==‘D’;‘C’==‘D’假,值为0。 D说:thisman!=‘D’; ‘C’!=‘D’真,值为1。显然,就是‘C’做了好事(四个关系表达式值之和为3)这时,我们可以理出头绪,要用枚举法,一个人一个人地去试,四句话中有三句为真,该人即所求。;#includevoid main( ){char thisman;int sa,sb,sc,sd,cond;for (thisman='A'; thisman<='D'; thisman++){sa=(thisman != 'A');sb=(thisman == 'C');sc=(thisman == 'D');sd=(thisman != 'D');cond=sa+sb+sc+sd;if (cond==3) printf("做好事的人是:%c\n", thisman);}}