题目:猜算式
你一定还记得小学学习过的乘法计算过程,比如:
273
x 15
------
1365
273
------
4095
请你观察如下的乘法算式
***
x ***
--------
***
***
***
--------
*****
星号代表某位数字,注意这些星号中,0~9中的每个数字都恰好用了2次。 (如因字体而产生对齐问题,请参看图p1.jpg)
条件:每个数字要出现两次、公式要成立、结果是五位数。
请写出这个式子最终计算的结果,就是那个5位数是多少?
1 #include2 #include 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