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
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=10010;
const int N=10;
int n;
int A[10],cnt=0;
bool check(int a,int b,int c){
return (b%c==0)&&(a+b/c==n);//((a<n)&&(b/c<n))&&(a+b/c==n);
//深坑。。 这里因为b/c的时候会把结果按int型来算,这里会出现bug
}
int num(int i,int j){
int res=0;
for(int idx=i;idx<=j;idx++)
res=res*10+A[idx];
return res;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=9;i++) A[i]=i;
do{
for(int i=1;i<=7;i++){
for(int j=i+1;j<=8;j++){
//[1,i][i+1,j][j+1,9]
int a=num(1,i);
int b=num(i+1,j);
int c=num(j+1,9);
//printf("%d %d %d\n",a,b,c);
if(check(a,b,c)) cnt++;
}
}
}while(next_permutation(A+1,A+10));
printf("%d\n",cnt);
return 0;
}