Division

题目链接: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;

 

你可能感兴趣的:(visio)