一、问题引入
小明在数学课上遇到一道奥数题是这样的,【】3*6528=3【】*8256,在两个【】内填入相同的数字使得等式成立。
不用分析了,直接show代码:
for(int i=1;i<=9;i++) if((i*10+3)*6528==(30+i)*8256) printf("%d",i); //答案为4
这就是最简单的枚举算法。
枚举算法的基本思想是:有序地去尝试每一种可能。
二、问题拓展
现在小明又遇到一个稍微复杂一点的奥数题,【】【】【】+【】【】【】=【】【】【】,将数字1~9分别填入9个【】中,每个数字智能使用一次使得等式成立。
分析:根据枚举思想我们只需要枚举每一位上所有可能的数就好了。
int a,b,c,d,e,f,g,h,i,total=0; for(a=1;a<=9;a++) //第1个数的百位 for(b=1;b<=9;b++) //第1个数的十位 for(c=1;c<=9;c++) //第1个数的个位 for(d=1;d<=9;d++) //第2个数的百位 for(e=1;e<=9;e++) //第2个数的十位 for(f=1;f<=9;f++) //第2个数的个位 for(g=1;g<=9;g++) //第3个数的百位 for(h=1;h<=9;h++) //第3个数的十位