输入正整数 n,按从小到大的顺序输出所有形如 abcde/fghij=n的表达式,其中a~j为数字0~9的一个排列,2≤n≤79
样例输入:
62
样例输出:
79546/01283=62
94736/01528=62
解:
看到题目之后会想到,10层暴力,但是很不容易控制,每一位不同,因此将其看成两个五位数进行做除法计算,因为每一位不同,所以最小为12345最大为98765使用一层循环判断被除数的所有情况,除数直接使用被除数对已给数做除法得到。再将每个5位数进行放到数组中进行判断,只是对于除数首位为0的时候进行特判一下即可。
#include<stdio.h>
int check(int i,int x){
int a[10]={0};
int j=0;
int flag=1;
while(i){
a[i%10]++;
i=i/10;
}
if(x<10000)
a[0]++;
while(x){
a[x%10]++;
x=x/10;
}
for(j=0;j<10;j++){
if(a[j]!=1){
flag=0;
}
}
return flag;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
int x;
int count=0;
for(int i=12345;i<=98765;i++)
{
if(i%n==0){
x=i/n;
if(check(i,x)==1)
{
if(x>10000)
printf("%d/%d=%d\n",i,x,n);
else
printf("%d/0%d=%d\n",i,x,n);
count++;
}
}
}
if(count==0)
printf("无满足情况!\n");
else
printf("共有%d种情况!\n",count);
}
return 0;
}