题目描述:
100 可以表示为带分数的形式:100 = 3 + 69258 / 714。
还可以表示为:100 = 82 + 3546 / 197。
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。输入:
从标准输入读入一个正整数N (N< 1000*1000)
输出:
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!
样例输入复制
100样例输出复制
11
还一个很坑的地方,求分子分母位数时,最好控制分母的位数,因为有上限为9,便于控制如果控制分子来弄,会报错
#include<iostream>
#include<algorithm>
#include<string>
#include<stdlib.h>
#define N 1000
using namespace std;
int main()
{
int a;//输入的带分数
cin >> a;
int sum = 0;//总数
string a1 = "123456789";
do {
for (int i = 1; i <= 7; i++)
{
string b1 = a1.substr(0, i);//+号前面
if (stoi(b1) >= a)
continue;
for (int j = 1; j < 9 - i - 1; j++)
{
string b2 = a1.substr(i, j);//加号后除号前(分子)
string b3 = a1.substr(i+j);//除号后(分母)
int c1, c2, c3;
c1 = stoi(b1);
c2 = stoi(b2);
c3 = stoi(b3);
if (c1 + c3 / c2 == a&&c3%c2==0)//if(c1 + c2 / c3== a&&c2%c3==0)
sum++;
}
}
} while (next_permutation(a1.begin(),a1.end()));
cout << sum;
return 0;
}