100100 可以表示为带分数的形式:100=3+69258714100=3+69258714
还可以表示为:100=82+3546197100=82+3546197
注意特征:带分数中,数字 1∼91∼9 分别出现且只出现一次(不包含 00)。
类似这样的带分数,100100 有 1111 种表示法。
输入格式
一个正整数。
输出格式
输出输入数字用数码 1∼91∼9 不重复不遗漏地组成带分数表示的全部种数。
数据范围
1≤N<1061≤N<106
输入样例1:
100
输出样例1:
11
输入样例2:
105
输出样例2:
6
思路:全排列后判断即可
import java.util.*;
public class Main{
static int n,res;
static int []arr = {1,2,3,4,5,6,7,8,9};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
dfs(0);
System.out.println(res);
}
static int getNum(int l,int r) {
int ans = 0;
for(int i = l;i <= r;i ++) {
ans = ans * 10 + arr[i];
}
return ans;
}
static boolean check() {
for(int i = 0;i <= 6;i ++) {
int a = getNum(0,i);
for(int j = i+1;j < 8;j ++) {
int b = getNum(i+1,j);
int c = getNum(j+1,8);
if(b % c == 0 && a + b / c == n) {
return true;
}
}
}
return false;
}
static void dfs(int idx) {
if(idx == 8) {
if(check()) {
res ++;
}
return;
}
for(int i = idx;i < 9;i ++) {
int t = arr[i];
arr[i] = arr[idx];
arr[idx] = t;
dfs(idx+1);
t = arr[i];
arr[i] = arr[idx];
arr[idx] = t;
}
}
}