题目:
100 可以表示为带分数的形式:100=3+69258/714
还可以表示为:100=82+3546/197
注意特征:带分数中,数字 1∼9 分别出现且只出现一次(不包含 0)。
类似这样的带分数,100 有 11 种表示法。
输入格式
一个正整数。
输出格式
输出输入数字用数码 1∼9 不重复不遗漏地组成带分数表示的全部种数。
数据范围
1≤N<1000000
输入样例1:
100
输出样例1:
11
输入样例2:
105
输出样例2:
6
代码:
#include<iostream>
using namespace std;
const int N=9;
bool st[N];
int n;
int res;
int fz[4];
int fm[10];
void fenmu(int u,int t,int a)
{
for(int i=1;i<=10;i++)
{
int b=0;
b=b*10+fm[i];
if(t+a/b==n) res++;
return;
}
for(int i=1;i<=9;i++)
{
if(!st[i])
{
fm[u]=i;
st[i]=true;
fenmu(u+1,t,a);
fm[u]=0;
st[i]=false;
}
}
}
void fenzi(int u,int t)
{
if(u>3)
{
int a=0;
for(int i=1;i<=3;i++)
{
a=a*10+fz[i];
}
fenmu(1,t,a);
return;
}
for(int i=1;i<=9;i++)
{
if(!st[i])
{
fz[u]=i;
st[i]=true;
fenzi(u+1,t);
fz[u]=0;
st[i]=false;
}
}
}
int main()
{
cin>>n;
for(int i=1;i<n;i++)
{
int t=i;
while(t)
{
if(t%10)
st[t%10]=true;
t=t/10;
}
fenzi(1,t);
}
cout<<res<<endl;
return 0;
}