带分数[蓝桥杯]

这篇具有很好参考价值的文章主要介绍了带分数[蓝桥杯]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目描述

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

输入格式

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

输出格式

程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。

输入样例 

100

输出样例 复制

11

即n=a+b/c

方法1(最暴力的做法):

        全排列9个数字(即1~9)

        使用两个for循环将9个数字分割成三个数

        判断三个数是否符合题目要求的等式

注:除法没有特殊说明是整除,所以默认不是整除,此时需要避免除法,即将除法变成加减乘

时间复杂度:

        全排列的时间复杂度是:n!*n;

        从9个数里面放两个隔板,即在八个空挡里面选两个位置放隔板,即将9个数分成三份,是C(8,2)

        所以总的时间复杂度为:n!*n*C(8,2),即:9!*9*8*7/2=91445760

#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
bool vis[10];
int n,an[10],ans;
int xten(int l,int r) {
	int temp=0;
	for(int i=l; i<=r; i++) {
		temp=temp*10+an[i]+1;
	}
	return temp;
}
void dfs(int q) {
	if(q==9) {
		for(int i=0; i<=6; i++) {
			for(int j=i+1; j<=7; j++) {
				int a=xten(0,i);
				int b=xten(i+1,j);
				int c=xten(j+1,8);
				if(c*(n-a)==b) ans++;
			}
		}
		return ;
	}
	for(int i=0; i<9; i++) {
		if(!vis[i]) {
			vis[i]=true;
			an[q]=i;
			dfs(q+1);
			vis[i]=false;
		}
	}
}
int main() {
	scanf("%d",&n);
	dfs(0);
	printf("%d\n",ans);
	return 0;
}

方法二(利用n减少时间复杂度):

         先枚举a和c,通过n与a、b、c的关系推出b;即b=n*c-n*a;

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=20;
int n;
bool st[N],backup[N];
int ans=0;
bool check(int a,int c) {
	int b=n*c-a*c;
	if(!a||!b||!c)return false;
	memcpy(backup,st,sizeof(st));
	while(b) {
		int x=b%10;
		if(!x||backup[x])return false;
		backup[x]=true;
		b/=10;
	}
	for(int i=1; i<=9; i++) {
		if(!backup[i])
			return false;
	}
	return true;
}
void dfs_c(int u,int a,int c) {
	if(u==9)return;
	if(check(a,c)) {
		ans++;
	}
	for(int i=1; i<=9; i++) {
		if(!st[i]) {
			st[i]=true;
			dfs_c(u+1,a,c*10+i);
			st[i]=false;
		}
	}
}
void dfs_a(int u,int a) {
	if(a>=n) return ;
	if(a) dfs_c(u,a,0);
	for(int i=1; i<=9; i++) {
		if(!st[i]) {
			st[i]=true;
			dfs_a(u+1,a*10+i);
			st[i]=false;
		}
	}
}
int main() {
	cin>>n;
	dfs_a(0,0);
	cout<<ans<<endl;
	return 0;
}

文章来源地址https://www.toymoban.com/news/detail-404229.html

到了这里,关于带分数[蓝桥杯]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ORB-SLAM稠密点云地图构建(黑白+彩色)+ pcd文件以八叉树形式表示

    pcl1.8.1 VTK 7.1.1 版本一定要对好,如果安装了不符的版本如我之前安的pcl1.1.3和VTK8.2 一定要卸载干净不然会一直报错 ,不同版本的pcl和vtk是无法共存的,并且光把包删除是不够的,要去/usr下面使用命令行(先搜索再一起删掉) 使用高翔老师的源码ORB-SLAM2-modified 运行前要先把

    2024年02月07日
    浏览(66)
  • HTTP状态 404 - 未找到 类型 状态报告 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。 Apache Tomcat/8.5.90

    数据库课程设计需要用intelligent idea制作web项目,并在页面上输出一定的内容,需要和Tomcat相连。都配置好后,每次运行都出现: 我把整个过程总结了一遍。 首先需要在idea中创建一个web项目,之前的版本可能直接就有web这个模版,但更新后的没有这个,如果有直接用就好了,

    2024年02月08日
    浏览(71)
  • 某软件的一个模块的需求规格说明书中描述【软件测试题目】

    某软件的一个模块的需求规格说明书中描述 (1)年薪制员工:严重过失,扣年终风险金的4%;过失,扣年终风险金的2% (2)非年薪制员工:严重过失,扣除当月薪资的8%;过失,扣除当月薪资的4% (1)分析原因及结果 原因 c1:年薪制员工 c2:非年薪制员工 c3:过失 c4:严重过失

    2024年02月08日
    浏览(48)
  • HTTP状态 404 - 未找到 类型 状态报告 消息 请求的资源[]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。 Apache Tomcat/8.5.70

    Idea启动javaweb 程序报错 HTTP状态 404 - 未找到 类型 状态报告 消息 请求的资源[]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。 Apache Tomcat/8.5.70 在本地可以启动tomcat,用idea启动tomcat项目报错。 最下面不能选中Build ,要选中下面那个点

    2024年02月11日
    浏览(52)
  • 蓝桥杯官网题目:2.包子凑数

    链接: 题目点这里 首先要知道一个数学定理裴蜀定理,还有完全背包的基本运用,这里只介绍前者 也可以看一下我的个人理解,我是第一次听说这个定理,理解可能有误差。 假设gcd(a,b)=d,gcd是最大公约数的意思。即a,b的最大公约数是d ax+by=m(x,y是任意整数,可正可负) 对

    2024年01月21日
    浏览(48)
  • 蓝桥杯宝藏排序题目算法(冒泡、选择、插入)

    从左往右找到最小的元素,放在起始位置;重复上述步骤,依次找到第2小、第3小元素... 第0次循环从[0,n-1]中找最小元素a[x],与a[0]交换 第1次循环从[1,n-1]中找最小元素,与a[1]交换 第2次循环从[2,n-1]中找最小元素,与a[2]交换 第i次循环从[i,n-1]中找最小元素,与a[i]交换 第n-2次循

    2024年01月17日
    浏览(38)
  • Linux 最大可以打开多少文件描述符?

    在日常开发中,对文件的操作可谓是再寻常不过的一件事情。那么你是否有这样一个疑问,我最多可以打开多少个文件呢? 在Linux系统中,当某个程序 打开文件 时,内核会返回相应的 文件描述符 (fd: file descriptors),也就是所谓的文件句柄,程序为了处理该文件必须引用此描

    2024年02月07日
    浏览(41)
  • 一个数是否可以被表示成两个数平方差

    什么样的正整数可以被表示为两个平方数的差。 即下面的方程 在正整数A等于什么的时候,有正整数解。注意,这里的A要求是正整数,而x和y也是正整数。显然,x^2y^2,xy,不可能x=y。并且,再请注意,这里并非要解上面的方程,而是要确定A取什么值时,方程有解。在有解的

    2024年02月06日
    浏览(44)
  • 蓝桥杯单片机第14届省赛客观题目+程序题目+程序题参考答案

    目录 客观题题目 程序题题目 程序题参考答案 main.h main.c Init.h Init.c SMG.h SMG.c DSQ.h DSQ.c YanShi.h YanShi.c JZKey.h JZKey.c ds1302.h ds1302.c iic.h iic.c onewire.h onewire.c LN555.h LN555.c             首先吐槽一下,花300元体验国赛的难度,是真的崩溃。          3个小时写完,2个小时改bug!

    2024年02月11日
    浏览(241)
  • 2019蓝桥杯省赛题目——“数的分解”

    目录 题目 要求 思路 最后的代码 结果 把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法? 注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。 这是一道结果填空

    2024年02月14日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包