蓝桥杯真题:带分数

题目描述:

100  可以表示为带分数的形式:100  =  3  +  69258  /  714。
还可以表示为:100  =  82  +  3546  /  197。
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100  有  11  种表示法。

输入:

从标准输入读入一个正整数N  (N< 1000*1000) 

输出:

程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。 
注意:不要求输出每个表示,只统计有多少表示法! 

样例输入复制

100  

样例输出复制

11

 还一个很坑的地方,求分子分母位数时,最好控制分母的位数,因为有上限为9,便于控制如果控制分子来弄,会报错

#include
#include
#include
#include
#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;
}

 

你可能感兴趣的:(蓝桥杯,蓝桥杯,p2p,职场和发展,c++,数据结构)