输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2≤n≤79。
样例输入:
62
样例输出:
79546/01283=62
94736/01528=62
【分析】
只需要枚举fghij就可以计算出abcde,然后判断是否所有数字都不相同即可。不仅程序简单,而枚举量也从10!=3628800降低至不到1万。
#include <iostream> #include<string.h> using namespace std; bool test(int i,int j)   //用数组t存放i,j的各位数字 {     int t[10];     memset(t,0,sizeof(t)); //初始化数组t,使得各位数字为0,好处是使得fghij<10000时f位置为0     int w = 0;     while(i)    //取i中各位数字存放在数组t中     {         t[w++] = i % 10;         i = i / 10;     }     while(j)    //取j中各位数字存放在数组t中     {         t[w++] = j % 10;         j = j / 10;     } //判断a~j是否恰好为数字的0~9的一个排列     for(int m = 0; m < 10; ++m)         for(int n = m+1; n < 10; ++n)             if(t[n] == t[m])   return false;     return true; }  int main() {     int n;     int k;     while(cin >> n && n >=2 && n <= 79)     {         k = 1234;//K表示分母、并且k最小为1234.最大为98765         while(k <= 98765)         {             int j = k * n;//j表示分子             if(j < 100000)   //若fghij<10000,满足题目的条件,f位置输出0             {                 if(test(j,k))                 {                     cout << j << "/" ;                     if(k < 10000)                         cout <<"0";                     cout << k << "=" << n <<endl;                 }             }             k++;         }     }     return 0; }