题目描述
输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2<=n<=79
输入
输入包括多行,每行一个正整数n,2<=n<=79
输出
针对每个输入的n,从小到大输出该表达式,若没有表达式可以生成,则不输出。
样例输入
62
样例输出
79546/01283=62
94736/01528=62
提示
输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2<=n<=79
输入
输入包括多行,每行一个正整数n,2<=n<=79
输出
针对每个输入的n,从小到大输出该表达式,若没有表达式可以生成,则不输出。
样例输入
62
样例输出
79546/01283=62
94736/01528=62
提示
/*用分治法全排列因为递归时间太长 所以用循环穷举*/
#include<stdio.h>
int main(){
int a[10],x=0,y,visit=0;
int num;
int b[10]={0};
while(scanf("%d",&num)!=EOF){
x=1234*num;
y=1234;
while(x<98765){///while
int y1=y;
visit=0;
for(int e=0;e<10;e++){
b[e]=0;
}
for(int j=0;j<5;j++){//for j
a[j]=y1%10;
if(b[a[j]]==1){
y++;
visit=1;
break;
}
b[a[j]]=1;
y1=y1/10;
}//for j
if(visit==0){//if visit
//x=num*y;
int x1=x;
for(int i=5;i<10;i++){
a[i]=x1%10;
if(b[a[i]]==1){
visit=1;
y++;
break;
}
b[a[i]]=1;
x1=x1/10;
}
if(visit==0){
printf("%d/",x);
if(y<10000)
printf("0");
printf("%d=%d\n",y,num);
y++;
}
}//if visit
x=num*y;
}//while
}
return 0;
}