问题描述:输入正整数n,按照从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2<=n<=79。
样例输入:
62
样例输出:
79546/01283=62
94736/01528=62
分析:枚举0~9的所有排列?没有必要,只需要枚举fghij就可以算出abcde,然后判断是否所有数字都不相同即可。不仅程序简单而且枚举量也从10!=3628800降至不到1万。
由此可见,即使采用暴力枚举,也是需要认真分析问题的。
下面贴上实现代码(可以实现多组样例输入):
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; bool Identify(int i,int j,int &res1,int &res2) { int n[10],flag=1; n[0]=i%10,n[1]=i/10%10,n[2]=i/100%10,n[3]=i/1000%10,n[4]=i/10000%10; n[5]=j%10,n[6]=j/10%10,n[7]=j/100%10,n[8]=j/1000%10,n[9]=j/10000%10; sort(n,n+10); for(int i=0;i<10;i++) { if(n[i]!=i) { flag=0; break; } } if(flag==1) return true; else return false; } int main() { int n; while(scanf("%d",&n)==1) { int i,j; for(i=1234;i<=98765;i++) { j=i*n; if(j>=10234&&j<=98765) { int res1=0,res2=1; if(Identify(i,j,res1,res2)==true) { if(i/10000%10&&j/10000%10) printf("%d/%d=%d ",j,i,n); else { printf("%d/0%d=%d ",j,i,n); } } } } } }
运行结果:
版权声明:本文为博主原创文章,未经博主允许不得转载。