输入正整数n,按从小到大的顺序输出所有形如abcde / fghij =n的表达式,其中a~j恰好为数字0 ~ 9的一个排列(可以有前导0),2<<n<<79。
样例输入:
62
样例输出:
79546 / 01283 = 62
94736 / 01528 = 62
【分析】
算法书上作者给的思路挺清晰的,枚举出fghij,通过fghij乘以n,算出来abcde,然后判断所有数字都不同即可,这里可以通过声明一个内存为10的数组来判断是否所有数字都不同。
需要注意的是:
除数与被除数都是五位,枚举fghij时,可以直接从01234开始,当fghij小于10000时,要把前面那个0存入数组中。
import java.util.Arrays;
import java.util.Scanner;
public class A {
static int[] arr=new int[10];
static boolean f(int a,int b){
Arrays.fill(arr,0);
if(a<10000){
arr[0]=1;
}
while(b>0){
arr[b%10]+=1;
b/=10;
}while(a>0){
arr[a%10]+=1;
a/=10;
}
for(int j=0;j<10;j++){
if(arr[j]!=1)
return false;
}
return true;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
for (int i = 1234; i <= 99999; i++) {
if (i < 10000) {
if (f(i, i * n)) {
System.out.println(i * n + "/" + "0" + i + "=" + n);
}
} else {
if (f(i, i * n)) {
System.out.println(i * n + "/" + i + "=" + n);
}
}
}
}
}
}