C語言 · 猜算式

題目:猜算式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 }
相關文章
相關標籤/搜索