100 可以表示为带分数的形式:100=3+69258714
还可以表示为:100=82+3546197
注意特征:带分数中,数字 1∼9 分别出现且只出现一次(不包含 0)。
类似这样的带分数,100 有 11 种表示法。
输入格式
一个正整数。
输出格式
输出输入数字用数码 1∼9 不重复不遗漏地组成带分数表示的全部种数。
数据范围
1≤N<106
输入样例1:
100
输出样例1:
11
输入样例2:
105
输出样例2:
6
难度:简单
时/空限制:1s / 64MB
总通过数:4580
总尝试数:6463
来源:第四届蓝桥杯省赛C++B/C组,第四届蓝桥杯省赛JAVAA/B组
算法标签
思路:全排类排序,1到9的数字,然后就是把全排类分为3段,第一段为一个整数,第二段为分母,第三段为分子。
#include<iostream>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
//1209 带分数, 全排列
int main()
{
int n;
cin>>n;
int a[9]={1,2,3,4,5,6,7,8,9};
int ct=0;
do{
int x=0;
for(int i=0;x<n;i++)//第一段
{
x=x*10+a[i];
double res=0;
for(int j=i+1;j<8;j++)// 第二段
{
res=res*10+a[j]*1.0;
double c=0;
for(int z=j+1;z<9;z++)//第三段
{
c=c*10+a[z]*1.0;
}
// cout<<"x: "<<x <<" res:"<<res<<" c: "<<c<<endl;
if( x+res/c==n )
ct++;
}
}
}while( next_permutation(a,a+9) ) ;
cout<<ct<<endl;
return 0;
}