# [蓝桥杯 2013 省 B] 带分数
## 题目描述
$100$ 可以表示为带分数的形式:$100 = 3 + \frac{69258}{714}$。
还可以表示为:$100 = 82 + \frac{3546}{197}$。
注意特征:带分数中,数字 $1$ ~ $9$ 分别出现且只出现一次(不包含 $0$)。
类似这样的带分数,$100$ 有 $11$ 种表示法。
## 输入格式
从标准输入读入一个正整数 $N(N<10^6)$。
## 输出格式
程序输出数字 $N$ 用数码 $1$ ~ $9$ 不重复不遗漏地组成带分数表示的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!
## 样例 #1
### 样例输入 #1
```
100
```
### 样例输出 #1
```
11
```
## 样例 #2
### 样例输入 #2
```
105
```
### 样例输出 #2
```
6
```
## 提示
原题时限 3 秒, 64M。蓝桥杯 2013 年第四届省赛
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int count = 0;
for(int i = 1;i < n;i++) {
for(int j = 1;j < 5000;j++) {//j < ?这里的5000是瞎填的hh
if(n == i + ((n - i) * j) / (1 * j)) {
//j为倍数,从n - i/1逐渐递增,倍数逐渐变大
int a = i,b = (n - i) * j,c = 1 * j;
if(judge(a,b,c)) count++;
}
}
}
System.out.print(count);
}
public static boolean judge(int a,int b,int c) {
int[] arr = new int[10];
while(a != 0) {
arr[a % 10]++;
a /= 10;
}
while(b != 0) {
arr[b % 10]++;
b /= 10;
}
while(c != 0) {
arr[c % 10]++;
c /= 10;
}
boolean flag = true;
for(int i = 1;i < 10;i++) {
if(arr[i] != 1) flag = false;//保证1-9不重复不遗漏
}
if(arr[0] != 0) flag = false;//出现0则不满足
return flag;
}
}