蓝桥杯真题:带分数

题目描述:

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

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鞋生.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值