猜算式


看下面的算式:

□□ 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
.....

请编程,输出所有可能的情况!

注意:
左边的两个乘数交换算同一方案,不要重复输出!
不同方案的输出顺序不重要

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 
 5 //功能:判断每个元素间互不相等,如果相等返回0,不相等返回1 
 6 int fun(int a,int b,int c,int d)
 7 {
 8     char str[10]="",s[5],flag[10]={0};
 9     itoa(a,s,10);
10     strcat(str,s);
11     itoa(b,s,10);
12     strcat(str,s);
13     itoa(c,s,10);
14     strcat(str,s);    
15     itoa(d,s,10);
16     strcat(str,s);
17     int len=strlen(str);
18     for(int i=0;i<len;i++)
19     if(flag[str[i]-'0'])
20         return 0;
21     else 
22         flag[str[i]-'0']=1;
23     return 1;
24 }
25 int main()
26 {
27     for(int i=11;i<=99;i++) //left
28     {
29         if(i%10==0)continue;
30         for(int j=i;j<=99;j++)
31         { 
32             if(j%10==0) continue;
33             for(int k=11;k<i;k++)//right
34             {
35                 if(k%10==0) continue;
36                 for(int l=111;l<=999;l++)
37                 {
38                     if((l%10==0)||(l/10%10==0)) continue;
39                     if(i*j==k*l&&fun(i,j,k,l))
40                     printf("%d x %d = %d x %d\n",i,j,k,l);
41                 }//end for l
42             }//end for k    
43         } //end for j
44     }//end for i
45     getchar();
46     return 0;
47 }

posted @ 2013-05-04 07:46  Please Call me 小强  阅读(421)  评论(0编辑  收藏  举报