题目地址:https://vjudge.net/problem/UVA-725
题目分析:
输入n,要求得到abcde/fghij = n,的abcde和fghij,这两个数的每位数占0-9中10个数字的一个且不重复。
思路:循环判断每个fghij,判断是否满足要求即可。注意fghij = abcde/n,所以循环从1234到98765/2就可以了。
AC代码:
int temp[10];
int judge(int a,int b)
{
for(int i=0;i<10;i++){temp[i]=0;}
if(a<=9999) temp[0] = 1;
while(a>0){
temp[a%10] = 1;
a /= 10;
}
while(b>0){
temp[b%10] = 1;
b /= 10;
}
if(temp[0]&&temp[1]&&temp[2]&&temp[3]&&temp[4]&&temp[5]&&temp[6]&&temp[7]&&temp[8]&&temp[9]) return 1;
else return 0;
}
int main()
{
int n,flag,kase=0;
while(scanf("%d",&n)!=EOF&&n){
if(kase++) printf("\n");
flag = 1;
for(int i=1234;i<=50000;i++){
//如果i和i*n满足每位数是0-9的,则输出
if(i*n>98766) continue;
if(judge(i,i*n)) {printf("%5d / %05d = %d\n",i*n,i,n);flag=0;}
}
if(flag) printf("There are no solutions for %d.\n",n);
}
return 0;
}