题目描述
输入
输出
样例输入
样例输出
100 可以表示为带分数的形式:100 = 3 + 69258 / 714。
还可以表示为:100 = 82 + 3546 / 197。
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
从标准输入读入一个正整数N (N<1000*1000)
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
100
11
枚举每一种情况,枚举+ / 的位置,就可以了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
int sum;
int i,j,k;
double n,a,b,c;
int p[10]={1,2,3,4,5,6,7,8,9};
scanf("%lf",&n);
sum=0;
do{
// for(i=0;i<9;i++)
// printf("%d ",p[i]);
// printf("\n");
for(i=1;i<8;i++){
a=0;
for(j=0;j<i;j++){
a=a*10.0+p[j];
}
for(j=i+1;j<9;j++){
b=0;
for(k=i;k<j;k++)
b=b*10.0+p[k];
c=0;
for(k=j;k<9;k++)
c=c*10.0+p[k];
if(n==(a+b/c))
{
sum++;
}
// printf("sum=%d\n",sum);
}
}
}while(next_permutation(p,p+9));
printf("%d\n",sum);
}