猜算式
看下面的算式:
□□ x □□ = □□ x □□□
它表示:两个两位数相乘等于一个两位数乘以一个三位数。
如果没有限定条件,这样的例子很多。
但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。
该算式中1至9的每个数字出现且只出现一次!
比如:
46 x 79 = 23 x 158
54 x 69 = 27 x 138
54 x 93 = 27 x 186
.....
请编程,输出所有可能的情况!
注意:
左边的两个乘数交换算同一方案,不要重复输出!
不同方案的输出顺序不重要
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 5 //功能:判断每个元素间互不相等,如果相等返回0,不相等返回1 6 int fun(int a,int b,int c,int d) 7 { 8 char str[10]="",s[5],flag[10]={0}; 9 itoa(a,s,10); 10 strcat(str,s); 11 itoa(b,s,10); 12 strcat(str,s); 13 itoa(c,s,10); 14 strcat(str,s); 15 itoa(d,s,10); 16 strcat(str,s); 17 int len=strlen(str); 18 for(int i=0;i<len;i++) 19 if(flag[str[i]-'0']) 20 return 0; 21 else 22 flag[str[i]-'0']=1; 23 return 1; 24 } 25 int main() 26 { 27 for(int i=11;i<=99;i++) //left 28 { 29 if(i%10==0)continue; 30 for(int j=i;j<=99;j++) 31 { 32 if(j%10==0) continue; 33 for(int k=11;k<i;k++)//right 34 { 35 if(k%10==0) continue; 36 for(int l=111;l<=999;l++) 37 { 38 if((l%10==0)||(l/10%10==0)) continue; 39 if(i*j==k*l&&fun(i,j,k,l)) 40 printf("%d x %d = %d x %d\n",i,j,k,l); 41 }//end for l 42 }//end for k 43 } //end for j 44 }//end for i 45 getchar(); 46 return 0; 47 }