题目:猜算式
看下面的算式:
□□ x □□ = □□ x □□□
它表示:两个两位数相乘等于一个两位数乘以一个三位数。 如果没有限定条件,这样的例子很多。
但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。 该算式中1至9的每个数字出现且只出现一次!
比如: 46 x 79 = 23 x 158 54 x 69 = 27 x 138 54 x 93 = 27 x 186 .....
请编程,输出所有可能的情况!
注意:左边的两个乘数交换算同一方案,不要重复输出!
要求考生把所有函数写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。 相关的工程文件不要拷入。 对于编程题目,要求选手给出的解答完全符合ANSI C标准,不能使用c++特性; 不能使用诸如绘图、中断调用等硬件相关或操作系统相关的API。
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 }
时间: 2024-10-23 13:12:20