題目:猜算式c++
看下面的算式:編程
□□ x □□ = □□ x □□□數組
它表示:兩個兩位數相乘等於一個兩位數乘以一個三位數。 若是沒有限定條件,這樣的例子不少。函數
但目前的限定是:這9個方塊,表示1~9的9個數字,不包含0。 該算式中1至9的每一個數字出現且只出現一次!spa
好比: 46 x 79 = 23 x 158 54 x 69 = 27 x 138 54 x 93 = 27 x 186 .....操作系統
請編程,輸出全部可能的狀況!3d
注意:左邊的兩個乘數交換算同一方案,不要重複輸出!調試
要求考生把全部函數寫在一個文件中。調試好後,存入與考生文件夾下對應題號的「解答.txt」中便可。 相關的工程文件不要拷入。 對於編程題目,要求選手給出的解答徹底符合ANSI C標準,不能使用c++特性; 不能使用諸如繪圖、中斷調用等硬件相關或操做系統相關的API。code
1 #include<stdio.h> 2 #include<string.h> 3 bool use[10];//訪問標記數組 4 int a[10];//判斷a與b的積是否出現過 5 int yin1,yin2,yin3,yin4; 6 int count=0; 7 void dfs(int begin){ 8 if(begin==10){ 9 yin1=a[1]*10+a[2]; 10 yin2=a[3]*10+a[4]; 11 yin3=a[5]*10+a[6]; 12 yin4=a[7]*100+a[8]*10+a[9]; 13 if((yin1*yin2==yin3*yin4) && yin1<yin2){ 14 count++; 15 printf("%2d*%2d = %2d*%3d\n",yin1,yin2,yin3,yin4); 16 } 17 return; 18 } 19 for(int i=1; i<=9; i++){ 20 if(!use[i]){ 21 use[i] = true; 22 a[begin]=i; 23 dfs(begin+1); 24 use[i] = false; 25 } 26 } 27 } 28 int main(){ 29 memset(use,false,sizeof(use)); 30 dfs(1); 31 printf("\n共有%d個.",count); 32 return 0; 33 }