带分数
思路
这题所运用全排列的方法即可快速求解,带分数可表示为n=b+c/d,由于考虑分数、小数的出现,将等式两边乘d,化为d*n=b*d+c。
#include <bits/stdc++.h>
using namespace std;
int a[9]={1,2,3,4,5,6,7,8,9};
int pan(int j,int k)//将提取的每一位组合起来
{
int l=0;
for(int i=j;i<=k;i++)
{
l=l*10+a[i];
}
return l;
}
int main()
{
long long n;
int sum=0;
cin>>n;
while(next_permutation(a,a+9))//全排列
{
for(int i=0;i<9;i++)
{
for(int j=i+1;j<9;j++)
{
int b=pan(0,i);//有三个区间且每个区间的数各不相同
int c=pan(i+1,j);
int d=pan(j+1,8);
if(d*n==d*b+c)
{
sum++;
}
}
}
}
cout<<sum<<endl;
return 0;
}