100 可以表示为带分数的形式:100 = 3 + 69258 / 714。
还可以表示为:100 = 82 + 3546 / 197。
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
输入格式从标准输入读入一个正整数N (N<1000*1000)
输出格式程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!
样例输入1 100 样例输出1 11 样例输入2 105 样例输出2 6 一个搜索题,想了想用全排列做,学会使用next_permutation库函数,可以帮助你进行全排列,next_permutation函数返回值是布尔类型,当进行完最后一个全排列后返回NULL。 思路:全排列之后的数组进行划分,划分为三部分,第一部分是整数部分t,其中由题意得t<n;第二部分是分子,由题意得分子大于分母且被分母整除。由以上可以进行一系列的剪枝。搜索过程中如果不是正解,则将分子的最后一位去掉,添加到分母部分的头部,分子少一位,分母多一位,再继续判断,如果是正解,那么ans++。 #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #define inf 0x7f7f7f using namespace std; int n,ans; int a[9]={1,2,3,4,5,6,7,8,9}; int main() { cin>>n; do{ int k = 0; int t = a[k]; while(t<n){ int fenzi = 0,fenmu = a[8]; for(int i = k+1;i < 8;i++) fenzi=fenzi*10+a[i]; int xishu = 10; while(fenzi>fenmu&&fenzi){ while(fenzi