带分数
100 可以表示为带分数的形式:100=3+69258 / 714
还可以表示为:100=82+3546 / 197
注意特征:带分数中,数字 1∼9 分别出现且只出现一次(不包含 0)。
类似这样的带分数,100 有 11 种表示法。
输入格式
一个正整数。
输出格式
输出输入数字用数码 1∼9 不重复不遗漏地组成带分数表示的全部种数。
数据范围
1≤N<106
输入样例1:
100
输出样例1:
11
输入样例2:
105
输出样例2:
6
思路
枚举9个数的全排列,然后暴力枚举3个数的所有可能
AC代码
#include <bits/stdc++.h>
using namespace std;
int n;int ans;
int a[10];
int cal(int l,int r){
int sum = 0;int base = 1;
for(int i = r;i >= l;i --){
sum += a[i] * base;
base *= 10;
}
return sum;
}
void dfs(){
do{
for(int i = 1;i < 8;i ++){
for(int j = i + 1;j < 9;j ++){
int a = cal(1,i);
int b = cal(i + 1,j);
int c = cal(j + 1,9);
if(b == c * n - c * a) ans ++;
}
}
}while(next_permutation(a + 1,a + 10));
return;
}
int main(){
cin >> n;
for(int i = 1;i <= 9;i ++) a[i] = i;
dfs();
cout << ans << endl;
return 0;
}