虽然是暴力求解,但是也要观察条件,尽量提高效率。如本题,原本要枚举10个数,但是分析可知通过枚举fghij就可以了。
#include<stdio.h> #include<string.h> //判断a,b中的所有数字都不等 int judge(int a,int b){ if(a>100000) return 0; int ans[15]; int count = 0; int i; memset(ans,0,sizeof(ans)); if(b<10000) ans[0]=1;//因为如果是四位数,要考虑第一个0 while(a){ ans[a%10]=1; a/=10; } while(b){ ans[b%10]=1; b/=10; } for(i=0;i<10;i++) count += ans[i]; if(count==10) return 1; else return 0; } int main(){ int n,fghij; int f=1; while(scanf("%d",&n) == 1){ if(n==0) return 0; for(fghij=1234;fghij<100000;fghij++){ if(judge(fghij*n,fghij)){ printf("%d / %05d = %d\n",fghij*n,fghij,n); f=0; } } if(f) printf("There are no solutions for %d\n",n); } return 0; }
时间: 2024-11-03 21:27:03