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 }
相关文章
相关标签/搜索