当前位置: 首页 > news >正文

2022年09月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

在这里插入图片描述

第1题:最长上升子序列

一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8). 你的任务,就是对于给定的序列,求出最长上升子序列的长度。
时间限制:11000
内存限制:65536
输入
输入的第一行是序列的长度N (1 <= N <= 1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000。
输出
最长上升子序列的长度。
样例输入
7
1 7 3 5 9 4 8
样例输出
4

要解决最长上升子序列的问题,可以使用动态规划的方法。

以下是使用C语言实现的代码:

#include <stdio.h>
#include <stdlib.h>int max(int a, int b) {return (a > b) ? a : b;
}int longestIncreasingSubsequence(int arr[], int n) {int dp[1001] = {0};int maxLen = 1;for (int i = 0; i < n; i++) {dp[i] = 1;for (int j = 0; j < i; j++) {if (arr[i] > arr[j]) {dp[i] = max(dp[i], dp[j] + 1);}}maxLen = max(maxLen, dp[i]);}return maxLen;
}int main() {int n;scanf("%d", &n);int arr[1001];for (int i = 0; i < n; i++) {scanf("%d", &arr[i]);}int longestLen = longestIncreasingSubsequence(arr, n);printf("%d\n", longestLen);return 0;
}

该代码使用一个一维数组dp来记录以每个位置上的元素为结尾的最长上升子序列的长度。

首先,将dp数组的初始值全部设为1,因为任意单个元素本身就是一个长度为1的上升子序列。

然后,从第二个位置开始,遍历数组中的每个元素,对于每个元素,再次遍历它之前的元素,如果找到比当前元素小的元素,说明可以将当前元素加入到以该元素结尾的子序列中,更新dp数组的值。

最后,遍历dp数组找到最大的值,即为最长上升子序列的长度。

第2题:神奇的口袋

有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。
时间限制:10000
内存限制:65536
输入
输入的第一行是正整数n (1 <= n <= 20),表示不同的物品的数目。接下来的n行,每行有一个1到40之间的正整数,分别给出a1,a2……an的值。
输出
输出不同的选择物品的方式的数目。
样例输入
3
20
20
20
样例输出
3

要解决神奇的口袋问题,可以使用递归的方法进行求解。

以下是使用C语言实现的代码:

#include <stdio.h>int count = 0;void magicalPocket(int items[], int n, int idx, int sum) {if (sum == 0) {count++;return;}if (idx == n || sum < 0) {return;}magicalPocket(items, n, idx + 1, sum - items[idx]);magicalPocket(items, n, idx + 1, sum);
}int main() {int n;scanf("%d", &n);int items[21];for (int i = 0; i < n; i++) {scanf("%d", &items[i]);}magicalPocket(items, n, 0, 40);printf("%d\n", count);return 0;
}

该代码使用递归函数magicalPocket来尝试不同的选择物品的方式。

递归函数的参数包括物品数组items、物品数量n、当前处理的物品索引idx和目标总体积sum

函数首先判断如果目标总体积为0,则表示找到一种选择方式,将count计数器加1并返回。

然后判断如果当前处理的物品索引为n或目标总体积小于0,则返回。

接下来,递归调用函数,分为两种情况:选择当前物品或不选择当前物品。

选择当前物品时,递归调用函数并更新目标总体积为sum - items[idx],同时将物品索引加1。

不选择当前物品时,递归调用函数并保持目标总体积为sum,同时将物品索引加1。

最后,主函数调用magicalPocket函数,并输出count计数器的值,即为不同的选择物品的方式的数目。

第3题:滑雪

Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-…-3-2-1更长。事实上,这是最长的一条。
时间限制:1000
内存限制:65536
输入
输入的第一行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。
输出
输出最长区域的长度。
样例输入
5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
样例输出
25

要解决滑雪问题,可以使用动态规划的方法。

以下是使用C语言实现的代码:

#include <stdio.h>
#include <stdbool.h>int max(int a, int b) {return (a > b) ? a : b;
}int longestSlide(int grid[][100], int R, int C, int r, int c, int dp[][100]) {if (dp[r][c] != -1) {return dp[r][c];}int directions[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};int maxLen = 1;for (int i = 0; i < 4; i++) {int newRow = r + directions[i][0];int newCol = c + directions[i][1];if (newRow >= 0 && newRow < R && newCol >= 0 && newCol < C && grid[newRow][newCol] < grid[r][c]) {maxLen = max(maxLen, longestSlide(grid, R, C, newRow, newCol, dp) + 1);}}dp[r][c] = maxLen;return maxLen;
}int main() {int R, C;scanf("%d %d", &R, &C);int grid[100][100];int dp[100][100];for (int i = 0; i < R; i++) {for (int j = 0; j < C; j++) {scanf("%d", &grid[i][j]);dp[i][j] = -1;}}int maxLength = 0;for (int i = 0; i < R; i++) {for (int j = 0; j < C; j++) {maxLength = max(maxLength, longestSlide(grid, R, C, i, j, dp));}}printf("%d\n", maxLength);return 0;
}

该代码使用一个二维数组dp来记录从每个位置开始的最长滑坡的长度,以避免重复计算。

首先,将dp数组的初始值全部设为-1,表示尚未计算。

然后,遍历输入的区域二维数组,对于每个位置(r, c),调用longestSlide函数进行递归计算以该位置为起点的最长滑坡长度。

longestSlide函数中,首先判断如果dp[r][c]已经计算过,则直接返回其值。

然后,定义四个方向的移动数组directions,分别为上、下、左、右。

接下来,遍历四个方向,计算新的行和列的位置,并判断新位置是否在合法范围内且高度小于当前位置的高度。

如果满足条件,则递归调用longestSlide函数并更新maxLen的值。

最后,将dp[r][c]设为maxLen并返回。

最后,主函数遍历整个区域二维数组,找到最大的滑坡长度,并输出。

第4题:删除数字

娇娇一年级了,刚刚学会了识数和比大小。有一天,她在黑板上写上了一串数字:2,1,2,5,4。接着她擦掉了第一个2,发现剩下1,2,4都在自己的位置上,即:1在第1位,2在第2位,4在第4位。
娇娇希望擦掉某些数后,剩下的数列中在自己位置上的数尽量多。她发现这个问题很有趣,想知道最多能有几个数在自己的位置上,请你帮帮她!
时间限制:1000
内存限制:65536
输入
第一行,一个整数 TestNum( ≤ 10),表示测试数据的组数。 接下来每组数据有两行,第一行:一个整数n( ≤ 1000),第二行:n个正整数(≤ 1000)。
输出
对于每组测试数据,输出一个数表示答案。
样例输入
3
5
2 1 2 5 4
7
2 2 3 2 4 5 3
10
1 1 2 2 3 3 4 4 5 5
样例输出
3
4
5
提示
第一组测试数据:擦掉第一个数,1 2 4 有 3 个数在自己的位置上。
第二组测试数据:擦掉第4个、第7个数,2 3 4 5 有 4 个数在自己的位置上。
第三组测试数据:每种相同的数擦掉一个,1 2 3 4 5 有 5 个数在自己的位置上。

要解决删除数字的问题,可以使用贪心算法的思路。

以下是使用C语言实现的代码:

#include <stdio.h>
#include <stdbool.h>int max(int a, int b) {return (a > b) ? a : b;
}int countNumbers(int numbers[], int n) {int count = 0;for (int i = 0; i < n; i++) {if (numbers[i] == i + 1) {count++;}}return count;
}int maxCountNumbers(int numbers[], int n) {int maxCount = 0;for (int i = 0; i < n; i++) {int temp = numbers[i];numbers[i] = -1;maxCount = max(maxCount, countNumbers(numbers, n));numbers[i] = temp;}return maxCount;
}int main() {int TestNum;scanf("%d", &TestNum);while (TestNum--) {int n;scanf("%d", &n);int numbers[1000];for (int i = 0; i < n; i++) {scanf("%d", &numbers[i]);}int result = maxCountNumbers(numbers, n);printf("%d\n", result);}return 0;
}

该代码使用两个函数来解决问题。

首先,countNumbers函数用于计算给定数字数组中有多少个数字在自己的位置上。

函数遍历数组,对于每个位置i,如果数字numbers[i]的值等于i + 1,则计数器count加1。

最后,返回计数器count的值。

接下来,maxCountNumbers函数用于找到删除数字后最多有多少个数字在自己的位置上。

函数遍历数组,对于每个位置i,将数字numbers[i]暂存到temp变量中,并将该位置的值设为-1,表示删除。

然后,调用countNumbers函数计算删除数字后剩下的数字数组中有多少个数字在自己的位置上,并更新最大值maxCount

最后,将该位置的值恢复为temp,继续下一次循环。

最后,主函数根据输入的测试组数,循环读取每组测试数据,并调用maxCountNumbers函数计算答案并输出。

相关文章:

2022年09月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;最长上升子序列 一个数的序列bi&#xff0c;当b1 < b2 < … < bS的时候&#xff0c;我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN)&#xff0c;我们可以得到一些上升的子序列(ai1, ai2, …, aiK)&#xff0c;这里1 < i1 < i2 &…...

二级MySQL(九)——表格数据处理练习

在Mysql中&#xff0c;可以用INSERT或【REPLACE】语句&#xff0c;向数据库中已一个已有的表中插入一行或多行记录。 在Mysql中&#xff0c;可以用【DELETE】或【TRUNCATE】语句删除表中的所有记录。 在Mysql中&#xff0c;可以用【UPDATE】语句来修改数据表中的记录。 为了完…...

QT ListQvector at赋值出错以及解决办法 QT基础入门【QT存储结构】

1、问题 error: passing const QString as this argument discards qualifiers error: assignment of read-only location vec.QVector<int>::at(0) 在Qt中QList,Qvector一般获取元素都是通过at(index)来获取,但是at()的返回是一个const & 常引用,也就是元素不支…...

STM32 CubeMX (H750)RGB屏幕 LTDC

STM32 CubeMX STM32 RGB888 LTDC STM32 CubeMX一、STM32 CubeMX 设置时钟树LTDC使能设置屏幕参数修改RGB888的GPIO 二、代码部分效果 RGB屏幕线束定义&#xff1a; 一、STM32 CubeMX 设置 时钟树 这里设置的时钟&#xff0c;关于刷新速度 举例子&#xff1a;LCD_CLK24MHz 时…...

Redis问题集合(三)在Redis容器里设置键值对

前言 前提是已经拉取了Redis镜像并创建了对应的容器做个记录&#xff0c;方便后续查看 步骤 查看Redis容器的ID&#xff1a;docker ps -a 进入容器&#xff1a;docker exec -it 容器ID /bin/bash进入redis命令行&#xff1a;redis-cli输入密码&#xff1a;auth 配置密码 查看…...

spark中排查Premature EOF: no length prefix available

报错信息 /07/22 10:20:28 WARN DFSClient: Error Recovery for block BP-888461729-172.16.34.148-1397820377004:blk_15089246483_16183344527 in pipeline 172.16.34.64:50010, 172.16.34.223:50010: bad datanode 172.16.34.64:50010 [DataStreamer for file /bdp/data/u9…...

numpy高级函数之where和extract函数

1 numpy.where() 函数返回输入数组中满足给定条件的元素的索引 ---------------------------------------------------- 代码&#xff1a; n1np.random.randint(10,20,10) n2np.where(n1>15) 结果&#xff1a; [17 15 19 15 12 10 16 11 15 13] #原始数组 (array([…...

用Python写一个武侠游戏

前言 在本教程中&#xff0c;我们将使用Python写一个武侠类的游戏&#xff0c;大的框架全部搭好了&#xff0c;很多元素都可以自己添加&#xff0c;让游戏更丰富 &#x1f4dd;个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列&#xff1a; ☄️爬虫JS逆向系列专栏 -…...

Java --- 异常处理

目录 一、什么是异常 二、异常抛出机制 三、如何对待异常 四、 Java异常体系 4.1、Throwable 4.2、Error 4.2、Exception 4.2.1、编译时异常 4.2.2、运行时期异常 五、异常处理 5.1、捕获异常&#xff08;try-catch&#xff09; 5.1.2、catch中异常处理方式 …...

CDN/DCDN(全站加速)排查过程中如何获取Eagle ID/UUID

目录 前言1.通过浏览器直接访问文件时获取Request ID 前言 阿里云CDN/DCDN(全站加速)为接收到的每个请求分配唯一的服务器请求ID&#xff0c;作为关联各类日志信息的标识符。当您在使用CDN/DCDN(全站加速)过程中遇到错误且希望阿里云技术支持提供协助时&#xff0c;需要提交失…...

网络安全应急响应预案培训与演练目的

1、增强网络安全意识 网络安全事故隐患往往“生成”于无形。例如&#xff0c;漏洞或黑客攻 击发生之时&#xff0c;受害方企事业单位可能处于非常危险的境地而无所察 觉&#xff0c;一些内部部门人员的网络安全意识也容易懈怠。但不论是内部 员工的疏忽还是管理上的大意&am…...

2023年高教社杯 国赛数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…...

7.Oracle视图创建与使用

1、视图的创建与使用 在所有进行的SQL语句之中&#xff0c;查询是最复杂的操作&#xff0c;而且查询还和具体的开发要求有关&#xff0c;那么在开发过程之中&#xff0c;程序员完成的并不是是和数据库的所有内容&#xff0c;而更多的是应该考虑到程序的设计结构。可以没有一个项…...

rust学习-不安全操作

在 Rust 中,不安全代码块用于避开编译器的保护策略 四种不安全操作 解引用裸指针通过 FFI (Foreign Function Interface,外部语言函数接口)调用函数调用不安全的函数内联汇编(inline assembly)解引用裸指针 原始指针(raw pointer,裸指针)* 和引用 &T 有类似的功…...

RHCE——八、DNS域名解析服务器

RHCE 一、概述1、产生原因2、作用3、连接方式4、因特网的域名结构4.1 拓扑4.2 分类4.3 域名服务器类型划分 二、DNS域名解析过程1、分类2、解析图&#xff1a;2.1 图&#xff1a;2.2 过程分析 三、搭建DNS域名解析服务器1、概述2、安装软件3、/bind服务中三个关键文件4、配置文…...

flink cdc初始全量速度很慢原因和优化点

link cdc初始全量速度很慢的原因之一是&#xff0c;它需要先读取所有的数据&#xff0c;然后再写入到目标端&#xff0c;这样可以保证数据的一致性和顺序。但是这样也会导致数据的延迟和资源的浪费。flink cdc初始全量速度很慢的原因之二是&#xff0c;它使用了Debezium作为捕获…...

论文笔记: MOGRIFIER LSTM

2020 ICLR 修改传统LSTM 当前输入和隐藏状态充分交互&#xff0c;从而获得更佳的上下文相关表达 1 Mogrifier LSTM LSTM的输入X和隐藏状态H是完全独立的 机器学习笔记&#xff1a;GRU_gruc_UQI-LIUWJ的博客-CSDN博客这篇论文想探索&#xff0c;如果在输入LSTM之前&#xf…...

Angular中使用drag and drop实现文件拖拽上传,及flask后端接收

效果&#xff1a;拖拽文件到组件上面时 边框变大变红 松手后发送到服务器(或者点击蓝字手动选择文件)并且把文件名显示在框内&#xff0c;美化还没做 html <div class"drapBox"><div id"drop" (dragenter)"dragenter($event)" (dragov…...

Spring Authorization Server入门 (十六) Spring Cloud Gateway对接认证服务

前言 之前虽然单独讲过Security Client和Resource Server的对接&#xff0c;但是都是基于Spring webmvc的&#xff0c;Gateway这种非阻塞式的网关是基于webflux的&#xff0c;对于集成Security相关内容略有不同&#xff0c;且涉及到代理其它微服务&#xff0c;所以会稍微比较麻…...

配置Flink

配置flink_1.17.0 1.Flink集群搭建1.1解压安装包1.2修改集群配置1.3分发安装目录1.4启动集群、访问Web UI 2.Standalone运行模式3.YARN运行模式4.K8S运行模式 1.Flink集群搭建 1.1解压安装包 链接: 下载Flink安装包 解压文件 [gpbhadoop102 software]$ tar -zxvf flink-1.1…...

39、springboot的前端静态资源的WebJar支持(bootstrap、jquery等)及自定义图标和首页

★ WebJar支持 Spring Boot支持加载WebJar包中的静态资源&#xff08;图片、JS、CSS&#xff09;&#xff0c; WebJar包中的静态资源都会映射到/webjars/**路径。——这种方式下&#xff0c;完全不需要将静态资源复制到应用的静态资源目录下。只要添加webjar即可。假如在应用的…...

【图论】缩点的综合应用(一)

一.缩点的概念 缩点&#xff0c;也称为点缩法&#xff08;Vertex Contraction&#xff09;&#xff0c;是图论中的一种操作&#xff0c;通常用于缩小图的规模&#xff0c;同时保持了图的某些性质。这个操作的目标是将图中的一些节点合并为一个超级节点&#xff0c;同时调整相关…...

C++—纯虚函数

一、前言 定义一个函数为虚函数&#xff0c;不代表函数为不被实现的函数。 定义函数为虚函数是为了允许用基类的指针来调用子类的这个函数。 定义一个函数为纯虚函数&#xff0c;才代表函数没有被实现。 定义纯虚函数是为了实现一个接口&#xff0c;起到一个规范的作用&…...

经过卷积神经网络之后的图片的尺寸如何计算

经过卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;处理后&#xff0c;图片的尺寸会发生变化&#xff0c;这是由于卷积层、池化层等操作引起的。计算图片经过卷积神经网络后的尺寸变化通常需要考虑卷积核大小、步幅&#xff08;stride&…...

Java升级JDK17(更高版本同理),修改maven

记住三个网址就行&#xff1a;下面这个是oracle的 Java Platform, Standard Edition 17 ReferenceImplementations https://www.oracle.com/java/technologies/downloads/#jdk17-windows 另外一个 redhat旗下的&#xff1a;这个是开源的&#xff08;推荐这个&#xff01;&am…...

Go测试之.golden 文件

Go测试中的.golden 文件是干什么用的&#xff1f;请举例说明 在Go语言中&#xff0c;.golden文件通常用于测试中的黄金文件&#xff08;golden files&#xff09;。黄金文件是在测试期间记录预期输出结果的文件。测试用例运行时&#xff0c;黄金文件用于比较实际输出与预期输出…...

回归预测 | MATLAB实现GA-RF遗传算法优化随机森林算法多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GA-RF遗传算法优化随机森林算法多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现GA-RF遗传算法优化随机森林算法多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程…...

springboot整合rabbitmq死信队列

springboot整合rabbitmq死信队列 什么是死信 说道死信&#xff0c;可能大部分观众大姥爷会有懵逼的想法&#xff0c;什么是死信&#xff1f;死信队列&#xff0c;俗称DLX&#xff0c;翻译过来的名称为Dead Letter Exchange 死信交换机。当消息限定时间内未被消费&#xff0c;…...

高中信息技术教资考试模拟卷(22下)

2022 年下半年全国教师资格考试模考卷一 &#xff08;高中信息技术&#xff09; 一、单项选择题&#xff08;本大题共 15 小题&#xff0c;每小题 3 分&#xff0c;共 45 分&#xff09; 1.2006 年 10 月 25 日&#xff0c;深圳警方成功解救出一名被网络骗子孙某…...

Linux中shadow及passwd格式内容解析

/etc/passwd文件包括Linux账号信息&#xff0c;示例如下&#xff1a; root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin 具体格式 用户名&#xff1…...

wordpress手机端和pc端兼容/seo快速排名软件平台

底层采用了第三方的socket库&#xff1a;CocoaAsyncSocket&#xff0c;里面包含了GCDAsyncSocket.h和GCDAsyncSocket.m文件。阅读源码可以发现&#xff0c;GCDAsyncSocket中已经对ipv4和ipv6同时做了支持&#xff0c;但是为何在ipv6情况下会connect失败呢。根据代码执行过程可以…...

网站上线倒计时html5模板/百度销售系统登录

对于Ubuntu 命令行下运行哪个命令进行软件包的安装&#xff1f;对于大部分开发者第一反应是: apt-get 但实际使用过程中&#xff0c;会遇到不知道所需要安装包的正确名称&#xff0c;导致安装失败&#xff0c;如下例子&#xff1a; Ubuntu下进行相关packet安装的命令是pip, 大…...

培训网站计时怎么破/济南seo排名优化推广

事务码MD61创建独立的生产计划...

2019建一个什么网站最好/上海seo培训中心

php的重定向&#xff0c;很简单&#xff0c;除去直接打印出重定向的JavaScript代码以外&#xff0c; 使用原生态的php重定向是这样的&#xff1a; <?php header("location: url"); exit; ?>一读到这条语句则会马上跳转到指定的重定向url。当然&#xff0c;P…...

东莞建设培训中心网站/手机端百度收录入口

i.MX6ULL终结者三大手册&#xff0c;加速学习和开发速度&#xff0c;一秒化无形! 《嵌入式Linux开发指南》《开发板使用手册》《裸机使用手册》 详细手册点击链接下载&#xff1a;https://pan.baidu.com/s/1Xat4C-cDa2Gi1UwNckNRTw 提取码&#xff1a;064r 前言 总领及学习指…...

开发微信小程序需要多少钱/汉中网站seo

list接口方法 List接口是Collection接口的子接口 List集合类中元素有序(即添加顺序和去除新婚徐一致)、且可重复 List集合中每个元素都有其对应的顺序索引&#xff0c;及支持索引 List容器中的元素都对应一个整数型的序号记载其在容器中的位置&#xff0c;可以根据序号存取容…...