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

news2024/11/16 10:52:19

在这里插入图片描述

C/C++编程(1~8级)全部真题・点这里
Python编程(1~6级)全部真题・点这里

第1题:数组指定部分逆序重放

将一个数组中的前k项按逆序重新存放。例如,将数组8,6,5,4,1前3项逆序重放得到5,6,8,4,1。
时间限制:1000
内存限制:65536
输入
输入为两行: 第一行两个整数,以空格分隔,分别为数组元素的个数n(1 < n < 100)以及指定的k(1 <= k <= n)。 第二行是n个整数,每两个整数之间用空格分隔。
输出
输出为一行:输出按题目要求逆序后数组的整数,每两个整数之间用空格分隔。
样例输入
5 3
8 6 5 4 1
样例输出
5 6 8 4 1

以下是使用C语言编写的将数组指定部分逆序重放的程序:

#include <stdio.h>

void reverseArray(int arr[], int start, int end) {
    while (start < end) {
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        start++;
        end--;
    }
}

int main() {
    int n, k;
    scanf("%d %d", &n, &k);

    int arr[n];
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    reverseArray(arr, 0, k - 1);

    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

程序首先定义了一个函数reverseArray,用于将数组中指定部分进行逆序。函数接受一个整数数组arr、一个起始索引start和一个结束索引end作为参数。使用双指针的方式,不断交换起始和结束索引对应的元素,直到两个指针相遇为止,完成逆序操作。

接下来,程序使用scanf函数从标准输入读取数组元素的个数n和指定的k值。

然后,定义一个大小为n的整数数组arr,并使用循环从标准输入读取数组的元素。

调用reverseArray函数,将数组arr的前k项进行逆序操作。

最后,使用循环将逆序后的数组arr的元素依次输出到标准输出,并在每两个元素之间添加一个空格。

例如,如果输入为5 38 6 5 4 1,则程序将将数组的前3项8 6 5进行逆序操作,得到5 6 8 4 1,然后将逆序后的数组输出到标准输出。

第2题:序列排序

对于给定的正整数序列,按照每个数的各位数和从大到小排序,各位数和相同的按照本身大小排序,大的在前,小的在后。
时间限制:1000
内存限制:65536
输入
第一行1个整数n,表示序列的大小。( 0 < n ≤ 1000) 第二行n个正整数,表示序列的每个数,每个数不大于100000000。
输出
输出按照题目要求排序后的序列
样例输入
6
17 26 9 13 88 10
样例输出
88 9 26 17 13 10

以下是使用C语言编写的对正整数序列按照各位数和排序的程序:

#include <stdio.h>

int calculateDigitSum(int num) {
    int sum = 0;
    while (num != 0) {
        sum += num % 10;
        num /= 10;
    }
    return sum;
}

void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

void sortSequence(int arr[], int size) {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            int sum1 = calculateDigitSum(arr[j]);
            int sum2 = calculateDigitSum(arr[j + 1]);
            if (sum1 < sum2 || (sum1 == sum2 && arr[j] < arr[j + 1])) {
                swap(&arr[j], &arr[j + 1]);
            }
        }
    }
}

int main() {
    int n;
    scanf("%d", &n);

    int arr[n];
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    sortSequence(arr, n);

    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

程序首先定义了一个函数calculateDigitSum,用于计算一个正整数的各位数和。函数接受一个整数num作为参数,通过循环将num除以10并取余数的方式,逐位将余数加到sum变量上,然后将num除以10,直到num等于0。最后,返回sum作为各位数和。

接下来,定义了一个辅助函数swap,用于交换两个整数的值。函数接受两个整型指针ab作为参数,通过引用传递的方式交换两个指针所指向的整数值。

然后,定义了一个函数sortSequence,用于对给定的序列按照题目要求进行排序。函数接受一个整数数组arr和数组的大小size作为参数。使用两层循环进行冒泡排序,每一轮比较相邻的两个元素的各位数和和本身大小,并根据题目要求进行交换。

main函数中,首先使用scanf函数从标准输入读取序列的大小n

然后,定义一个大小为n的整数数组arr,并使用循环从标准输入读取序列的每个数。

调用sortSequence函数,将数组arr按照题目要求进行排序。

最后,使用循环将排序后的数组arr的元素依次输出到标准输出,并在每两个元素之间添加一个空格。

例如,如果输入为617 26 9 13 88 10,则程序将对序列进行排序,最终输出为88 9 26 17 13 10

第3题:内部元素之和

输入一个整数矩阵,计算位于矩阵内部的元素之和。所谓矩阵内部的元素,不在第一行和最后一行的元素以及第一列和最后一列的元素。
时间限制:1000
内存限制:65536
输入
第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以一个空格分开。 接下来输入的m行数据中,每行包含n个整数(每个数大于等于0,小于1000),整数之间以一个空格分开。
输出
输出对应矩阵的内部元素和
样例输入
3 3
3 4 1
3 7 1
2 0 1
样例输出
7

以下是使用C语言编写的计算矩阵内部元素之和的程序:

#include <stdio.h>

int main() {
    int m, n;
    scanf("%d %d", &m, &n);

    int matrix[m][n];
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &matrix[i][j]);
        }
    }

    int sum = 0;
    for (int i = 1; i < m - 1; i++) {
        for (int j = 1; j < n - 1; j++) {
            sum += matrix[i][j];
        }
    }

    printf("%d\n", sum);

    return 0;
}

程序首先使用scanf函数从标准输入读取矩阵的行数m和列数n

然后,定义一个大小为mn列的整数矩阵matrix,并使用两层循环从标准输入读取矩阵的每个元素。

接下来,定义一个变量sum,用于存储矩阵内部元素之和。

使用两层循环遍历矩阵内部的元素,即从第二行到倒数第二行,从第二列到倒数第二列的元素,并将每个元素的值累加到sum中。

最后,使用printf函数将变量sum的值输出到标准输出。

例如,如果输入为3 3和以下矩阵:

3 4 1
3 7 1
2 0 1

则程序将计算矩阵内部元素之和,即7,并将其输出到标准输出。

第4题:谁考了第k名

在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。
时间限制:1000
内存限制:65536
输入
第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的k(1≤k≤n)。 其后有n行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。
输出
输出第k名学生的学号和成绩,中间用空格分隔。(注:请用%g输出成绩)
样例输入
5 3
90788001 67.8
90788002 90.3
90788003 61
90788004 68.4
90788005 73.9
样例输出
90788004 68.4

以下是使用C语言编写的求第k名学生学号和成绩的程序:

#include <stdio.h>

typedef struct {
    int id;
    float score;
} Student;

int main() {
    int n, k;
    scanf("%d %d", &n, &k);

    Student students[n];
    for (int i = 0; i < n; i++) {
        scanf("%d %f", &students[i].id, &students[i].score);
    }

    // 使用冒泡排序按成绩从高到低排序
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (students[j].score < students[j + 1].score) {
                Student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }

    printf("%d %.1f\n", students[k - 1].id, students[k - 1].score);

    return 0;
}

程序首先使用scanf函数从标准输入读取学生的人数n和求第k名学生的k

然后,定义一个结构体Student来表示每个学生的学号和成绩。

接下来,定义一个大小为nStudent类型数组students,并使用循环从标准输入读取每个学生的学号和成绩。

使用冒泡排序将学生按照成绩从高到低进行排序。

最后,使用printf函数将第k名学生的学号和成绩输出到标准输出。

例如,如果输入为5 3和以下学生数据:

90788001 67.8
90788002 90.3
90788003 61
90788004 68.4
90788005 73.9

则程序将对学生按照成绩进行排序,并输出第3名学生的学号和成绩,即90788004 68.4

第5题:话题焦点人物

微博提供了一种便捷的交流平台。一条微博中,可以提及其它用户。例如Lee发出一条微博为:“期末考试顺利 @Kim @Neo”,则Lee提及了Kim和Neo两位用户。
我们收集了N(1 < N < 10000)条微博,并已将其中的用户名提取出来,用小于等于100的正整数表示。
通过分析这些数据,我们希望发现大家的话题焦点人物,即被提及最多的人(题目保证这样的人有且只有一个),并找出那些提及它的人。
时间限制:1000
内存限制:65536
输入
输入共两部分: 第一部分是微博数量N,1 < N < 10000。 第二部分是N条微博,每条微博占一行,表示为: 发送者序号a,提及人数k(0 < = k < = 20),然后是k个被提及者序号b1,b2…bk; 其中a和b1,b2…bk均为大于0小于等于100的整数。相邻两个整数之间用单个空格分隔。
输出
输出分两行: 第一行是被提及最多的人的序号; 第二行是提及它的人的序号,从小到大输出,相邻两个数之间用单个空格分隔。同一个序号只输出一次。
样例输入
5
1 2 3 4
1 0
90 3 1 2 4
4 2 3 2
2 1 3
样例输出
3
1 2 4

以下是使用C语言编写的找到话题焦点人物及提及它的人的程序:

#include <stdio.h>

int main() {
    int N;
    scanf("%d", &N);

    int mentions[101] = {0};  // 用于记录每个用户被提及的次数,下标表示用户序号
    int mentionedBy[101] = {0};  // 用于记录每个用户提及话题焦点人物的次数,下标表示用户序号

    for (int i = 0; i < N; i++) {
        int sender, count;
        scanf("%d %d", &sender, &count);

        mentions[sender]++;  // 发送者被提及的次数加1

        for (int j = 0; j < count; j++) {
            int mentioned;
            scanf("%d", &mentioned);
            mentionedBy[mentioned]++;  // 被提及者提及话题焦点人物的次数加1
        }
    }

    int maxMentions = -1;  // 最大提及次数
    int focusPerson = -1;  // 话题焦点人物序号

    for (int i = 1; i <= 100; i++) {
        if (mentionedBy[i] > maxMentions) {
            maxMentions = mentionedBy[i];
            focusPerson = i;
        }
    }

    printf("%d\n", focusPerson);

    for (int i = 1; i <= 100; i++) {
        if (mentions[i] == focusPerson) {
            printf("%d ", i);
        }
    }

    printf("\n");

    return 0;
}

程序首先使用scanf函数从标准输入读取微博的数量N

然后,定义两个大小为101的整数数组mentionsmentionedBy,分别用于记录每个用户被提及的次数和提及话题焦点人物的次数。数组下标表示用户序号。

接下来,使用循环依次读取每条微博的信息。对于每条微博,首先读取发送者的序号和被提及的人数。然后,将发送者的被提及次数加1,并使用另一个循环读取被提及者的序号,并将其提及话题焦点人物的次数加1。

接下来,使用两个循环分别找到被提及最多的人(即提及次数最多的人)和提及它的人。

最后,使用printf函数将话题焦点人物的序号输出到标准输出,并使用另一个循环将提及它的人的序号按照从小到大的顺序输出到标准输出。

例如,如果输入为5和以下微博数据:

1 2 3 4
1 0
90 3 1 2 4
4 2 3 2
2 1 3

则程序将分析微博数据,找到被提及最多的人为3,并输出到标准输出。接着,找到提及它的人为124,并按照从小到大的顺序输出到标准输出,即1 2 4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1084403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024北京国际物联网展览会(物联网展)物物相连,万物互联

2024北京国际物联网展览会&#xff08;物联网展&#xff09; 2024 Beijing international IOT Expo 时间:2024年6月28-30日 地点:北京亦创国际会展中心 前言 随着信息技术的不断发展&#xff0c;物联网已成为当前全球信息社会发展的主要趋势之一。物联网技术正在逐渐渗透到人…

同创永益成为英迈首家签约生态伙伴

日前&#xff0c;同创永益已和英迈签署生态运营战略协议&#xff0c;并正式成为英迈全新打造的GTM生态圈的首位签约合作伙伴。双方将携手对“同创数字韧性平台”产品进行一站式联合解决方案的持续整合&#xff0c;并将大力推动该联合解决方案在市场上的进一步拓展。 云原生时代…

小白自学笔记—网络安全(黑客技术)

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟…

Avalonia常用小控件Menu

1.项目下载地址&#xff1a;https://gitee.com/confusedkitten/avalonia-demo 2.UI库Semi.Avalonia&#xff0c;项目地址 https://github.com/irihitech/Semi.Avalonia 样式预览&#xff1a; axaml代码 &#xff1a; <UserControl xmlns"https://github.com/avalo…

元宇宙赛道加速破圈,UM Company区块链游戏抓住全球发展新风口

当下全球游戏市场仍然具备较大的增长空间。据机构预测&#xff0c;至2025年全球移动游戏市场规模将达1606亿美元&#xff0c;对应2020-2025年复合增长率11&#xff05;。 与此同时&#xff0c;随着元宇宙概念持续升温&#xff0c;全球多家互联网巨头纷纷入场。行业分析平台New…

微软已终止支持Windows Server 2012 2012 R2

微软已于2023年10月10日终止支持Windows Server 2012 和 Windows Server 2012 R2&#xff0c;在此日期后&#xff0c;这些产品将不再接收安全更新、非安全更新、Bug 修复、技术支持或联机技术内容更新。 如果无法升级到下一个版本&#xff0c;则需要使用扩展安全更新 (ESU) 长达…

三菱FX5U系列PLC更改运动轴脉冲输出方向控制点的具体方法和步骤详解

三菱FX5U系列PLC更改运动轴脉冲输出方向控制点的具体方法和步骤详解 本例中将轴1的脉冲方向控制点Y4更改为Y16 具体方法可参考以下步骤: 如下图所示,将原来Y4的接线拆下,重新接到Y16端子上(为了安全,建议断电后进行) 将网线一端插到PLC网口,一端连接到电脑上(电脑上无网…

OpenCV4(C++)—— 图像噪声与图像滤波

文章目录 前言一、图像噪声1、椒盐噪声2、高斯噪声 二、图像滤波 前言 图像噪声是图像在摄取或传输时所受的随机信号干扰&#xff0c;表现为图像信息或者像素亮度的随机变化。目前最常见的两者噪声是椒盐噪声和高斯噪声。 一、图像噪声 1、椒盐噪声 椒盐噪声又被称作脉冲噪声…

中科大 Epc 综合英语备考 之 单词篇

Lesson 1 ENGLISH — A WORLD LANGUAGE单词表课后练习同义替换选词填空 Lesson 2 MY LACK OF GUMPTION单词表课后练习同义替换选词填空 Lesson 3 WINNING ISNT EVERYTHING单词表课后练习同义替换选词填空 Lesson 5 PRIVATE SPACE单词表课后练习同义替换选词填空 Lesson 9 THE M…

【常见错误】SVN提交项目时,出现了这样的提示:“XXX“ is scheduled for addition, but is missing。

SVN提交项目时&#xff0c;出现了这样的提示&#xff1a;“XXX“ is scheduled for addition, but is missing。 原因是&#xff1a;之前用SVN提交过的文件/文件夹&#xff0c;被标记为"addition"状态&#xff0c;等待被加入到仓库。虽然你把这个文件删除了&#xf…

centos / oracle Linux 常用运维命令讲解

目录 1.shell linux常用目录&#xff1a; 2.命令格式 3.man 帮助 4.提示符 5.echo输出字符串或变量值 6.date显示及设置系统的时间或日期 7.重启系统 8.关闭系统 9.登录注销 10.wget 下载文件 11.ps 查看系统的进程 12.top动态监视进程信息和系统负载等信息 13.l…

OpenAI科学家谈GPT-4的潜力与挑战

OpenAI Research Scientist Hyung Won Chung 在首尔国立大学发表的一场演讲。 模型足够大&#xff0c;某些能力才会显现&#xff0c;GPT-4 即将超越拐点并在其能力上实现显着跳跃。GPT-3 和 GPT-4 之间的能力仍然存在显着差距&#xff0c;并且尝试弥合与当前模型的差距可能是无…

NPU上PyTorch模型调优问题案例

在昇腾AI处理器上训练PyTorch框架模型时&#xff0c;可能由于算子在CPU上的下发速度、动态shape等问题&#xff0c;导致性能降低&#xff0c;那么本期就分享几个关于PyTorch模型调优的典型案例&#xff0c;给出调优思路及具体的调优方法&#xff1a; 1、NPU亲和优化器替换调优…

压力测试+接口测试

jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;体积小&#xff0c;功能全&#xff0c;使用方便&#xff0c;是一个比较轻量级的测试工具&#xff0c;使用起来非常简单。因 为jmeter是java开发的&#xff0c;所以运行的时候必须先要安装jdk才可以。jmeter是…

2023 年度,最受人欢迎的低代码开发平台大盘点

在介绍之前&#xff0c;先给大家讲解一下&#xff0c;当前低代码领域主要发展的2个方向 一、低代码开发平台 面向大中小型企业&#xff0c;写少了代码&#xff0c;提供一系列低代码引擎&#xff0c;表单设计器、流程设计器、大屏设计器&#xff0c;支持通过可视化组件少量代码…

配置OSPF包文分析和验证

.2.2实验2&#xff1a;配置OSPF包文分析和验证 [1] 实验目的 通过抓包分析OSPF的包文实现OSPF区域认证的配置 实验拓扑 实验拓扑图如图1-3所示。 图1-3 配置OSPF包文分析和验证 实验步骤 IP地址的配置、运行OSPF的步骤与实验1相同&#xff0c;此处略。[2] 在R1的g0/0/0抓包…

配电室远程运维平台:现代化的电力管理解决方案

随着科技进步和电力行业的发展&#xff0c;配电室正在逐渐实现远程运维&#xff0c;这一创新技术趋势带来的改变&#xff0c;无疑提升了电力配送的效率和精确性。 力安科技电易云配电室远程运维平台&#xff0c;通过在高低压配电柜、变压器、一级/二级配电柜、配电箱、电缆…

今天面试招了个18K的人,从字节出来的果然都有两把刷子···

公司前段时间缺人&#xff0c;也面了不少测试&#xff0c;前面一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在15-20k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是4年工作经验&#xff0c;但面试中&#xff0c;不…

[小林coding]4.1TCP三次握手四次挥手笔记_1012

1.tcp头部格式&#xff1a; 序列号&#xff1a;用来解决网络包收发的顺序问题 确认应答号&#xff1a;解决丢包问题&#xff08;一般都是1&#xff09; 2.建立一个 TCP 连接是需要客户端与服务端达成上述三个信息的共识 Socket&#xff1a;由 IP 地址和端口号组成&#xff08;…

1000个已成功入职的软件测试工程师简历范文模板(含真实简历)

如果你想学习自动化测试&#xff0c;那么下面这套视频应该会帮到你很多 如何逼自己1个月学完自动化测试&#xff0c;学完即就业&#xff0c;小白也能信手拈来&#xff0c;拿走不谢&#xff0c;允许白嫖.... 最后我这里给你们分享一下我所积累和整理的一些文档和学习资料&#…