2020年09月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
C/C++编程(1~8级)全部真题・点这里
第1题:铺砖
对于一个2行N列的走道。现在用12,22的砖去铺满。问有多少种不同的方式。
时间限制:3000
内存限制:131072
输入
整个测试有多组数据,请做到文件底结束。每行给出一个数字N,0 <= n <= 250
输出
如题
样例输入
2
8
12
100
200
样例输出
3
171
2731
845100400152152934331135470251
1071292029505993517027974728227441735014801995855195223534251
下面是一个使用C语言实现的解决方案,可以计算铺砖的不同方式数量:
#include <stdio.h>#define MAX_N 251typedef long long ll;ll dp[MAX_N];// 动态规划求解铺砖的不同方式数量
void calculate_ways() {dp[0] = 1;dp[1] = 1;dp[2] = 3;for (int i = 3; i < MAX_N; i++) {dp[i] = dp[i-1] + 2 * dp[i-2];}
}int main() {calculate_ways();int N;while (scanf("%d", &N) != EOF) {printf("%lld\n", dp[N]);}return 0;
}
这个实现中,我们使用动态规划的思想来计算铺砖的不同方式数量。首先,我们定义一个全局数组dp
,用于存储不同长度走道的铺砖方式数量。然后,我们通过递推关系式dp[i] = dp[i-1] + 2 * dp[i-2]
来计算不同长度走道的铺砖方式数量。
在main
函数中,我们首先调用calculate_ways
函数,计算出所有长度走道的铺砖方式数量。然后,我们循环读取输入的走道长度N
,并输出对应的铺砖方式数量dp[N]
。
注意:在实际编写和运行代码时,请确保输入数据的格式和范围符合题目要求,并进行必要的错误处理。此外,题目给出的时间限制较短,因此可以采用动态规划预计算的方式,在实际查询时直接输出结果,而不需要每次都重新计算。
第2题:吃糖果2
现有n(50 > n > 0)个糖果,每天只能吃2个或者3个,请计算共有多少种不同的吃法吃完糖果。
时间限制:1000
内存限制:65536
输入
输入的每一行包括一组测试数据,即为糖果数n。最后一行为0,表示测试结束。
输出
每一行输出对应一行输入的结果,即为吃法的数目。
样例输入
1
2
3
4
12
0
样例输出
0
1
1
1
12
下面是一个使用C语言实现的解决方案,可以计算吃糖果的不同吃法数量:
#include <stdio.h>int count_eating_ways(int n) {if (n < 2) {return 0;}int dp[n + 1];dp[0] = 0;dp[1] = 0;dp[2] = 1;dp[3] = 1;for (int i = 4; i <= n; i++) {dp[i] = dp[i - 2] + dp[i - 3];}return dp[n];
}int main() {int n;while (scanf("%d", &n) == 1 && n != 0) {int ways = count_eating_ways(n);printf("%d\n", ways);}return 0;
}
这个实现中,我们定义了一个辅助函数count_eating_ways
,用于计算吃糖果的不同吃法数量。在函数中,我们使用动态规划的思想来计算,定义一个数组dp
,其中dp[i]
表示吃i
个糖果的不同吃法数量。初始时,我们将dp[0]
和dp[1]
设为0,dp[2]
和dp[3]
设为1。然后,我们通过递推关系式dp[i] = dp[i - 2] + dp[i - 3]
来计算吃i
个糖果的不同吃法数量。
在main
函数中,我们循环读取输入的糖果数量n
,并调用count_eating_ways
函数计算对应的吃法数量。最后,我们输出吃法数量。
注意:在实际编写和运行代码时,请确保输入数据的格式和范围符合题目要求,并进行必要的错误处理。
第3题:扩号匹配问题
在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$“标注,不能匹配的右括号用”?“标注.
时间限制:3000
内存限制:65536
输入
输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100
输出
对每组输出数据,输出两行,第一行包含原始输入字符,第二行由”$“,”?“和空格组成,”$“和”?"表示与之对应的左括号和右括号不能匹配。
样例输入
((ABCD(x)
)(rttyy())sss)(
样例输出
((ABCD(x)
$$
)(rttyy())sss)(
? ?$
下面是一个使用C语言实现的解决方案,可以找到无法匹配的左括号和右括号,并输出标记后的字符串:
#include <stdio.h>
#include <string.h>#define MAX_LENGTH 100void match_parentheses(char* str) {int len = strlen(str);int mismatch[len];memset(mismatch, 0, sizeof(mismatch));int stack[MAX_LENGTH];int top = -1;for (int i = 0; i < len; i++) {if (str[i] == '(') {stack[++top] = i;} else if (str[i] == ')') {if (top == -1) {mismatch[i] = 1;} else {top--;}}}while (top != -1) {mismatch[stack[top--]] = 1;}for (int i = 0; i < len; i++) {if (mismatch[i] == 1) {str[i] = '$';} else if (str[i] == ')') {str[i] = '?';}}
}int main() {char str[MAX_LENGTH];while (fgets(str, MAX_LENGTH, stdin) != NULL) {int len = strlen(str);if (str[len - 1] == '\n') {str[len - 1] = '\0';}match_parentheses(str);printf("%s\n", str);for (int i = 0; i < len; i++) {if (str[i] == '$' || str[i] == '?') {printf("%c", str[i]);} else {printf(" ");}}printf("\n");}return 0;
}
这个实现中,我们定义了一个辅助函数match_parentheses
,用于找到无法匹配的左括号和右括号,并将其标记为'$'
和'?'
。函数中,我们使用一个栈来辅助匹配括号,遍历字符串,当遇到左括号时,将其索引入栈;当遇到右括号时,如果栈为空,则说明没有与之匹配的左括号,将当前右括号标记为无法匹配;否则,将栈顶的左括号出栈,表示匹配成功。最后,将剩余未匹配的左括号标记为无法匹配。
在main
函数中,我们循环读取输入的字符串,并调用match_parentheses
函数对其进行处理。然后,我们先输出原始字符串,再输出标记后的字符串,其中无法匹配的左括号用'$'
表示,无法匹配的右括号用'?'
表示。
注意:在实际编写和运行代码时,请确保输入数据的格式和范围符合题目要求,并进行必要的错误处理。
第4题:质数的和与积
两个质数的和是S,它们的积最大是多少?
时间限制:10000
内存限制:65536
输入
一个不大于10000的正整数S,为两个质数的和。
输出
一个整数,为两个质数的最大乘积。数据保证有解。
样例输入
50
样例输出
589
下面是一个使用C语言实现的解决方案,可以找到两个质数的和为给定值S时,它们的最大乘积:
#include <stdio.h>int is_prime(int n) {if (n < 2) {return 0;}for (int i = 2; i * i <= n; i++) {if (n % i == 0) {return 0;}}return 1;
}int find_max_product(int S) {int max_product = 0;for (int i = 2; i <= S / 2; i++) {if (is_prime(i) && is_prime(S - i)) {int product = i * (S - i);if (product > max_product) {max_product = product;}}}return max_product;
}int main() {int S;scanf("%d", &S);int max_product = find_max_product(S);printf("%d\n", max_product);return 0;
}
这个实现中,我们定义了两个辅助函数。is_prime
函数用于判断一个数是否为质数。在函数中,我们首先判断小于2的数不是质数。然后,从2开始遍历到该数的平方根,如果存在能整除该数的因子,说明该数不是质数,否则是质数。
find_max_product
函数用于找到两个质数的和为给定值S时,它们的最大乘积。在函数中,我们从2开始遍历到S的一半,对于每个数i,判断它和S - i是否都是质数。如果是质数,则计算它们的乘积,并与当前的最大乘积比较,更新最大乘积。
在main
函数中,我们读取输入的S,并调用find_max_product
函数找到最大乘积。然后,我们输出最大乘积。
注意:在实际编写和运行代码时,请确保输入数据的格式和范围符合题目要求,并进行必要的错误处理。此外,题目保证有解,因此不需要额外处理无解的情况。
第5题:因子问题
任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。
时间限制:10000
内存限制:65536
输入
包括两个整数N、M。N不超过1,000,000。
输出
输出一个整数a,表示结果。如果某个案例中满足条件的正整数不存在,则在对应行输出-1
样例输入
35 10
样例输出
5
下面是一个使用C语言实现的解决方案,可以找到满足条件的最小正整数a:
#include <stdio.h>int find_smallest_factor(int N, int M) {for (int a = 1; a <= N; a++) {if (N % a == 0 && (M - a) % N == 0) {return a;}}return -1;
}int main() {int N, M;scanf("%d %d", &N, &M);int smallest_factor = find_smallest_factor(N, M);printf("%d\n", smallest_factor);return 0;
}
这个实现中,我们定义了一个辅助函数find_smallest_factor
,用于找到满足条件的最小正整数a。在函数中,我们从1开始遍历到N,对于每个数a,判断是否同时满足两个条件:N能整除a,且(M - a)能整除N。如果满足条件,则返回a作为最小正整数;如果遍历完所有可能的a都不满足条件,则返回-1。
在main
函数中,我们读取输入的N和M,并调用find_smallest_factor
函数找到最小正整数a。然后,我们输出a。
注意:在实际编写和运行代码时,请确保输入数据的格式和范围符合题目要求,并进行必要的错误处理。
相关文章:

2020年09月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
C/C编程(1~8级)全部真题・点这里 第1题:铺砖 对于一个2行N列的走道。现在用12,22的砖去铺满。问有多少种不同的方式。 时间限制:3000 内存限制:131072 输入 整个测试有多组数据,请做到文件底结束。每行给出…...

30天入门Python(基础篇)——第2天:Python安装(保姆级)与IDE的认识与选择+详细安装教程
文章目录 专栏导读上一节课回顾1、Python解释器的安装查看各个版本的Python解释器①、ok,双击安装②、这里我们选择【自定义】安装, 下面的【将Python添加在环境变量】大家一定要打个勾③、点击【Next】进行下一步④、这里不建议安装在C盘, 点击【Browse】我在F盘创…...

软件测试/测试开发丨ChatGPT:带你进入智能对话的新时代
简介 人工智能时代来临 我们正处于AI的iPhone时刻。——黄仁勋(英伟达CEO) ChatGPT 好得有点可怕了,我们距离危险的强人工智能不远了。——马斯克(Tesla/SpaceX/Twitter CEO) 以上的内容说明我们现在正处于一个技术大…...

logback/log4j基本配置和标签详解
什么是logback logback 继承自 log4j,它建立在有十年工业经验的日志系统之上。它比其它所有的日志系统更快并且更小,包含了许多独特并且有用的特性。 logback.xml 首先直接上配置,我在项目过程中发现一些同时遇到需要logback文件的时候就去…...

雅思 《九分达人》阅读练习(二)
目录 雅思阅读练习 《九分达人》test3 paragraph3 1.单词含义要记准确,敏感度要上来。 2.找准定位,之后理解句子大致含义。 说说关于判断题的做题方法 关于“承认”有哪些单词 同替词汇 think 可以用什么其他单词来替换 单词 一些疑问 I have…...

[论文笔记] Gunrock: A High-Performance Graph Processing Library on the GPU
Gunrock: A High-Performance Graph Processing Library on the GPU Gunrock: GPU 上的高性能图处理库 [Paper] [Code] PPoPP’16 摘要 Gunrock, 针对 GPU 的高层次批量同步图处理系统. 采用了一种新方法抽象 GPU 图分析: 实现了以数据为中心(data-centric)的抽象, 以在结点…...
A Guide to PriorityQueue
原文链接:https://blog.csdn.net/ohwang/article/details/116934308 PriorityQueue 又叫 优先队列 注意1: PriorityQueue是用数组实现,数组大小可以动态增加,容量无限。 优先队列采用的是堆排序(默认为最小堆ÿ…...

Jenkins教程—构建多分支流水线项目
本教程向你展示如何使用Jenkins协调一个用 Node Package Manager (npm) 管理的简单 Node.js 和 React 项目, 并同时 为开发和产品环境交付不同的结果。 在开始本教程之前,建议你前往 教程概览 页面,并至少完成一个 介绍教程, 从而…...
【vxe-table】@enter.keyup.native实现在列表中回车光标向右移动聚焦及vxe-table的一些方法的使用(具体实现+踩坑篇)
需求: vxe-table表格 1、新增的时候,vxe-table第一行的第一个输入框聚焦 2、输入完成后,按回车,自动跳到同一行的下一个输入框 3、当在同一行的最后一个输入框输入完成后,按回车跳回第一个输入框并选中状态且复选框为选…...

科技资讯|苹果Vision Pro获得被动冷却系统及数字表冠控制界面专利
据patentlyapple报道,美国专利商标局正式授予苹果一项与头戴式设备(Apple Vision Pro)相关的专利11751366,该设备可以提供被动冷却系统,利用光学组件的表面来管理热量,而不会对用户显示的视觉信息产生不利影…...

【悬溺】Flyway的纯爱时刻
文章目录 文档背景你好Demo地址Flyway的CPU时刻(工作流程)她在哪Flyway的使用流程官方文档 文档背景 由于维护项目的哥们们技术水平参差不齐,长短不一。故做此篇文章。多点纯爱,这个世界需要纯爱战士! 你好 Flyway是一款开源的数据…...

Linux权限介绍
引言 Linux中有两种用户:超级用户(root)、普通用户 超级用户:在Linux中能做任何事,不受到权限的限制普通用户:会受到权限的限制超级用户的命令提示符是#,普通用户的命令提示符是$ 命令ÿ…...
git:一个本地仓库绑定多个远程的方法以及遇到的问题
绑定方法见知乎大佬:本地Git仓库关联多个远程仓库的两种方法 一般情况下,没人这么搞! 但是公司迁移git仓库阶段,xx云环境上的gitlab要有操作记录,不然影响整体评分,这就不得一个本地仓库关联了原来的仓库新…...

如何将WPS设置为默认的办公软件
很多小伙伴的电脑中有好几种办公软件,每次打开文档表格都要进行选择,有小伙伴想要将WPS设置成默认的办公软件该怎么操作呢,下面小编就给大家详细介绍一下将WPS设置为默认的办公软件的方法,有需要的小伙伴快来和小编一起看一看吧。…...
css 文本溢出隐藏,显示省略号
单行隐藏 overflow:hidden; //超出的文本隐藏text-overflow:ellipsis; //溢出用省略号显示white-space:nowrap; //溢出不换行多行隐藏 overflow:hidden; text-overflow:ellipsis; display:-webkit-box; //将对象作为弹性伸缩盒子模型显示。 -webkit-box-orient:vertical; //从…...

构建普适通用的企业网络安全体系框架
在当今数字化时代,网络安全已成为企业保护信息资产和业务运行的重要任务。恶意攻击、数据泄露、网络病毒等威胁不断演进,给企业和个人带来了巨大风险。为了应对这一挑战,许多企业已经采取了一系列网络安全措施,如制定了网络安全政…...

TinTin Web3 动态精选:以太坊基金会推出 EELS、Arbitrum Stylus 上线
TinTin 快讯由 TinTinLand 开发者技术社区打造,旨在为开发者提供最新的 Web3 新闻、市场时讯和技术更新。TinTin 快讯将以周为单位, 汇集当周内的行业热点并以快讯的形式排列成文。掌握一手的技术资讯和市场动态,将有助于 TinTinLand 社区的开…...

软考高级架构师下篇-14面向服务架构设计理论
目录 1. 引言2. SOA的相关概念3. SOA的发展历史4. SOA的参考架构5. SOA 主要协议和规范6. SOA设计的标准要求7. SOA的作用与设计原则8. SOA的设计模式9. SOA构建与实施10. 前文回顾1. 引言 在面向服务的体系结构(Service-Oriented Architecture,SOA)中,服务的概念有了延伸…...
HTTP 和 HTTPS
一.HTTP HTTP(Hypertext Transfer Protocol)是一种用于在网络上传输超文本(Hypertext)和其他资源的应用层协议。HTTP是Web中最常用的协议之一,它使得浏览器可以请求和显示网页,也允许服务器传送网页内容和其…...

linux使用stress命令进行压力测试cpu
👨🎓博主简介 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...