题目:猜算式
你一定还记得小学学习过的乘法计算过程,比如:
273
x 15
------
1365
273
------
4095
请你观察如下的乘法算式
***
x ***
--------
***
***
***
--------
*****
星号代表某位数字,注意这些星号中,0~9中的每个数字都恰好用了2次。 (如因字体而产生对齐问题,请参看图p1.jpg)
条件:每个数字要出现两次、公式要成立、结果是五位数。
请写出这个式子最终计算的结果,就是那个5位数是多少?
1 #include<stdio.h> 2 #include<string.h> 3 int jinwei(int i,int *f){ 4 while(i>0){ 5 if(f[i%10]==2){ 6 return 0; 7 } 8 f[i%10]++; 9 i/=10; 10 } 11 return 1; 12 } 13 bool check(int i,int j,int a,int b,int c,int d){ 14 int x[20]={i/100,(i/10)%10,i%10,j/100,(j/10)%10,j%10,a/100,(a/10)%10,a%10,b/100,(b/10)%10,b%10,c/100,(c/10)%10,c%10,d/10000,(d/1000)%10,(d/100)%10,(d/10)%10,d%10}; 15 int y[20]={0}; 16 for(int h=0;h<20;h++){ 17 y[x[h]]++; 18 } 19 for(int h=0;h<20;h++){ 20 if(y[h]!=2){ 21 return false; 22 }else{ 23 return true; 24 } 25 } 26 } 27 int main(){ 28 int i,j; 29 for(i=100;i<=999;i++){ 30 for(j=100;j<=999;j++){ 31 int f[10]={0};//数组初始化 32 int a = i*(j%10);//乘个位得 33 int b = i*((j/10)%10);//乘十位得 34 int c = i*(j/100);//乘百位得 35 36 if(a>=1000||b>=1000||c>=1000||i*j>=100000||a<100||b<100) 37 continue; 38 39 if(!check(i,j,a,b,c,i*j)) 40 continue; 41 42 if(i<j && jinwei(i,f)&&jinwei(j,f)&&jinwei(i*j,f)&&jinwei(a,f)&&jinwei(b,f)) 43 printf("%d %d %d %d %d %d\n",i,j,a,b,c,i*j); 44 } 45 } 46 return 0; 47 }