C語言 · 猜算式 · 乘法豎式

題目:猜算式數組

你必定還記得小學學習過的乘法計算過程,好比:學習

   273字體

x   15spa

------  code

1365  blog

273string

------  io

4095  class

請你觀察以下的乘法算式nw

     ***

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 }
相關文章
相關標籤/搜索