枚举法的本质就是从所有答案中去搜索正确的解,再使用枚举法的时候,需要明确问题的答案的范围,这样才可以指定范围内搜索答案,指定范围后用循环和判断语句验证答案的正确性,从而得到所需要的答案。一般代码如下:
for(i=x1,i<=x2;i++) for(j=y1;j<=y2;j++) for(k=z1;k<=k2;k++) if(i,j,k满足验证条件) printf(输入正确答案)在小学奥数中经常会看到一些填数字的游戏,列如下,其中每个汉字代表一个不同的数字,要求计算出这些汉字分别代表哪个数字。 算术描述题 x —————— 题题题题题
可以看出一共有5个汉字,每个汉字都可以是0-9中的一个数字,我们的答案所在范围就很清楚了,只需要验证范围内计算的结果和最终结果是否相等,我们就能找到答案。但是要注意为了算是有意义,“算”字和“题”字不能为0;
代码如下:
#include<stdio.h> int main() { int i1,i2,i3,i4,i5; long int result,multi; for(i1=1;i1<9;i1++) { for(i2=0;i2<=9;i2++) { for(i3=0;i3<=9;i3++) { for(i4=0;i4<=9;i4++) { for(i5=1;i5<=9;i5++) { multi = i1*10000+i2*1000+i3*100+i4*10+i5; result =i5*100000+i5*10000+i5*1000+i5*100+i5*10+i5; if(multi*i1== result) { printf("\n%5d%2d%2d%2d%2d\n",i1,i2,i3,i4,i5); printf("X%12d\n",i1); printf("__________\n"); printf("%3d%2d%2d%2d%2d%2d\n",i5,i5,i5,i5,i5,i5,i5); }, } } } } } return 0; }a?b?c?d?e = f
int main() { int num[6],i[4]; //num 用来表示5个运算数,i用来来代表4个运算符 char oper[5]={' ','+','-','*','/'};//用来存储4个运算符 int result;//结果 int left,right; int flag ; int j; for( j=1;j<=5;j++) { scanf("%d",&num[j]); //输入5个运算数 } scanf("%d",&result);//输入结果 for(i[1]=1;i[1]<=4;i[1]++) //第一个运算符 { if(i[1]<4||num[2]!=0) //要有意义不能除0 { for(i[2]=1;i[2]<=4;i[2]++) { if(i[2]<4||num[3]!=0) { for(i[3]=1;i[3]<=4;i[3]++) { if(i[3]<4||num[4]!=0) { for(i[4]=1;i[4]<=4;i[4]++) { if(i[4]<4||num[5]!=0) { left = 0; right = num[1]; flag = 1; for(j=1;j<=4;j++) //对算式计算 { switch(oper[i[j]]) { case'+': left = left+flag*right; right = num[j+1]; flag = 1; break; case'-': left = left+flag*right; right = num[j+1]; flag = -1; break; case'*': right = right*num[j+1]; break; case'/': right = right/num[j+1]; break; } } if(left+flag*right == result) { for(j=1;j<=4;j++) { printf("%d%c",num[j],oper[i[j]]); } printf("%d = %d\n",num[5],result); } } } } } } } } } return 0; }