题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/B

题意:

       输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列(可以有前导0),2<=n<=79。输出0结束。

      注意:每个案例之间用空格隔开,且0后不需要,注意输出数据的格式。

      案例:

      input

      61

      62

      0

      output

      There are no solutions for 61.

      

      79546 / 01283 = 62

      94736 / 01528 = 6

思路分析:

      被除数一定是5位数,找出所有满足所有数字各不相同的数,存入数组,并将它们各个位置上的数存入数组。

      再通过枚举找出所有满足条件的数输出等式或无解。

源代码如下:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int b[100000][6];
 5 int main()
 6 {
 7     int N,i,j,k,n=0,s=0,a[5],t=0;
 8     cin>>N;
 9     for(i=12345;i<=98765;i++)     //找出满足基本条件的所有可能的被除数
10     {
11         a[0]=i%10;
12         a[1]=i/10%10;
13         a[2]=i/100%10;
14         a[3]=i/1000%10;
15         a[4]=i/10000;
16         for(j=0;j<4;j++)
17         {
18             for(k=j+1;k<5;k++)
19                 if(a[j]==a[k])
20                     break;
21             if(k<5)
22                 break;
23         }
24         if(j>=4)
25         {
26             b[s][5]=i;
27             b[s][0]=i%10;
28             b[s][1]=i/10%10;
29             b[s][2]=i/100%10;
30             b[s][3]=i/1000%10;
31             b[s][4]=i/10000;
32             s++;
33         }
34     }
35     while(N)
36     {
37         if(t++)
38             cout<<endl;
39         n=0;
40         for(i=0;i<s;i++)
41             if(b[i][5]%N==0)               //找出满足条件的除数
42             {
43                 a[0]=b[i][5]/N%10;
44                 a[1]=b[i][5]/N/10%10;
45                 a[2]=b[i][5]/N/100%10;
46                 a[3]=b[i][5]/N/1000%10;
47                 a[4]=b[i][5]/N/10000;
48                 for(j=0;j<4;j++)
49                 {
50                     for(k=j+1;k<5;k++)
51                         if(a[j]==a[k])
52                             break;
53                     if(k<5)
54                         break;
55                 }
56                 if(j>=4)
57                 {
58                     for(j=0;j<5;j++)
59                     {
60                         for(k=0;k<5;k++)
61                             if(a[j]==b[i][k])
62                                 break;
63                         if(k<5)
64                             break;
65                     }
66                     if(j>=5)
67                     {   
68                         n++;
69                         printf("%d / %05d = %d\n",b[i][5],b[i][5]/N,N);
70                     }
71                 }
72 
73             }
74         if(n==0)        //判断是否有解
75             printf("There are no solutions for %d.\n",N);
76         cin>>N;
77     }
78     return 0;

 

posted on 2015-07-27 15:34  尘埃。  阅读(237)  评论(0编辑  收藏  举报