【蓝桥杯】历届试题 带分数
问题描述100 可以表示为带分数的形式:100 = 3 + 69258 / 714。
还可以表示为:100 = 82 + 3546 / 197。
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
输入格式从标准输入读入一个正整数N (N<1000*1000)
输出格式程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!
样例输入1100样例输出111样例输入2105样例输出26
【思路】暴力枚举
设带分数 为 x + y/z
将 1- 9全排列
对每个排列分成三部分
【代码】
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<iostream> #include<algorithm> using namespace std; int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int n; int ans = 0; void deal(){ int x =0, y =0, z = 0; for(int i=0;i<=6;++i){ int ki = 0; x = 0; for(;ki<=i;++ki){ x = x*10 + a[ki]; } for(int j=i+1;j<=7;++j){ y = z = 0; int kj = ki; for(;kj<=j;++kj){ y = y*10 + a[kj]; } for(;kj<=8;++kj){ z = z*10 + a[kj]; } if( (n-x)*z==y ) ans++; } } } int main() { cin >> n; do{ deal(); }while(next_permutation(a,a+9)); //调用STL生成全排列 cout << ans; return 0; }