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

news2024/12/24 7:06:19

在这里插入图片描述

第1题:余数相同问题

已知三个正整数 a,b,c。
现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同。
请问满足上述条件的x的最小值是多少?
数据保证x有解。
输入
一行,三个不大于1000000的正整数a,b,c,两个整数之间用一个空格隔开。
输出
一个整数,即满足条件的x的最小值。
样例输入
300 262 205
样例输出
19

这个问题可以通过遍历可能的除数 x 的方式来解决。我们可以从 2 开始逐个尝试,直到找到一个满足条件的 x 为止。

具体的解题思路如下:

(1)输入三个正整数 a,b,c。

(2)从 2 开始遍历除数 x。

(3)对于每个 x,计算 a、b、c 分别除以 x 的余数。

(4)如果三个余数相等,则输出 x,并结束程序。

(5)如果遍历完所有可能的 x 值都没有找到满足条件的 x,根据题目要求,这种情况是不会发生的。

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

#include <stdio.h>

int main() {
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);

    int x = 2; // 从 2 开始尝试除数 x
    while (1) {
        int remainder_a = a % x;
        int remainder_b = b % x;
        int remainder_c = c % x;

        if (remainder_a == remainder_b && remainder_b == remainder_c) {
            printf("%d\n", x);
            break;
        }

        x++;
    }

    return 0;
}

你可以将这段代码保存为一个名为 remainder.c 的文件,然后使用 C 编译器进行编译并运行。输入三个正整数,程序将输出满足条件的 x 的最小值。

第2题:生成括号

生成括号
Paul是一名数学专业的同学,在课余选修了C++编程课,现在他能够自己写程序判断判断一个给定的由’(‘和’)'组成的字符串是否是正确匹配的。可是他不满足于此,想反其道而行之,设计一个程序,能够生成所有合法的括号组合,请你帮助他解决这个问题。
时间限制:1000
内存限制:65536
输入
输入只有一行N,代表生成括号的对数(1 ≤ N ≤ 10)。
输出
输出所有可能的并且有效的括号组合,按照字典序进行排列,每个组合占一行。
样例输入
3
样例输出
((()))
(()())
(())()
()(())
()()()

这个问题可以使用递归的方法来解决。基本思路是,对于每个位置,我们可以选择放置左括号 “(” 或右括号 “)”,但需要满足以下两个条件:

(1)左括号的数量不能超过 N。

(2)右括号的数量不能超过左括号的数量。

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void generateParentheses(char* current, int leftCount, int rightCount, int N) {
    // 如果左括号和右括号的数量都达到了 N,说明已经生成了一组合法的括号组合
    if (leftCount == N && rightCount == N) {
        printf("%s\n", current);
        return;
    }

    // 如果左括号的数量小于 N,可以选择放置左括号
    if (leftCount < N) {
        current[leftCount + rightCount] = '(';
        generateParentheses(current, leftCount + 1, rightCount, N);
    }

    // 如果右括号的数量小于左括号的数量,可以选择放置右括号
    if (rightCount < leftCount) {
        current[leftCount + rightCount] = ')';
        generateParentheses(current, leftCount, rightCount + 1, N);
    }
}

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

    // 创建一个字符数组用于存储括号组合
    char* current = (char*)malloc(sizeof(char) * (2 * N + 1));
    memset(current, 0, sizeof(char) * (2 * N + 1));

    generateParentheses(current, 0, 0, N);

    free(current);

    return 0;
}

你可以将这段代码保存为一个名为 generate_parentheses.c 的文件,然后使用 C 编译器进行编译并运行。输入一个整数 N,程序将输出所有可能的并且有效的括号组合,按照字典序进行排列,每个组合占一行。

第3题:课程冲突

小 A 修了 n 门课程, 第 i 门课程是从第 ai 天一直上到第 bi 天。
定义两门课程的冲突程度为 : 有几天是这两门课程都要上的。
例如 a1=1,b1=3,a2=2,b2=4 时, 这两门课的冲突程度为 2。
现在你需要求的是这 n 门课中冲突程度最大的两门课的冲突程度。
时间限制:1000
内存限制:65536
输入
第一行一个正整数 n 表示课程数量。 接下来 n 行,每行两个正整数 ai,bi。 2 ≤ n≤ 1000, 1 ≤ ai ≤ bi ≤ 1000。
输出
输出一个整数表示最大的冲突程度
样例输入
3
1 3
2 4
5 5
样例输出
2

这个问题可以通过遍历所有课程的组合,并计算它们的冲突程度来解决。对于每对课程,我们可以比较它们的上课时间,找出它们的重叠天数,并更新最大的冲突程度。

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

#include <stdio.h>

int max(int a, int b) {
    return (a > b) ? a : b;
}

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

    int maxConflict = 0;

    // 读取每门课程的上课时间并计算冲突程度
    for (int i = 0; i < n; i++) {
        int ai, bi;
        scanf("%d %d", &ai, &bi);

        // 遍历已经计算过的课程,计算冲突程度
        for (int j = 0; j < i; j++) {
            int aj, bj;
            scanf("%d %d", &aj, &bj);

            int conflict = max(0, min(bi, bj) - max(ai, aj) + 1);
            maxConflict = max(maxConflict, conflict);
        }
    }

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

    return 0;
}

你可以将这段代码保存为一个名为 course_conflict.c 的文件,然后使用 C 编译器进行编译并运行。输入课程数量和每门课程的上课时间,程序将输出最大的冲突程度。

第4题:广义格雷码

在一组数的编码中,若任意两个相邻(首尾也视为相邻)的代码只有一位二进制数不同,则称这种编码为格雷码。如四位格雷码:
0000、0001、0011、0010、0110、0111、0101、0100、1100、1101、1111、1110、1010、1011、1001、1000
现在将格雷码扩展至其他进制,仍然是相邻两个数只能有一位不同。输入两个正整数n,m分别表示长度和进制,每行输出一个n位m进制数,输出任意一种编码即可。(提示:putchar输出效率更高)
时间限制:1000
内存限制:65536
输入
一行,两个整数n,m。其中 2 ≤ n ≤ 12 ,2 ≤ m ≤ 10 且mn ≤ 500000
输出
任意一种编码方案,每个编码一行。相邻两个编码相差一位。第一个编码和最后一个编码算相邻
样例输入
2 3
样例输出
00
10
20
21
01
11
12
22
02

这个问题可以使用递归的方式来生成广义格雷码。基本思路是,对于长度为 n 的广义格雷码,可以通过将长度为 n-1 的广义格雷码进行扩展得到。

具体的解题思路如下:

(1)输入两个整数 n 和 m。

(2)如果 n 等于 1,那么只有 m 个可能的编码,依次输出即可。

(3)否则,递归生成长度为 n-1 的广义格雷码。

(4)将长度为 n-1 的广义格雷码依次扩展为长度为 n 的广义格雷码。对于扩展的过程,我们需要在每个编码前面加上一个新的数字,范围从 0 到 m-1。

(5)输出生成的广义格雷码。

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

#include <stdio.h>

void generateGrayCode(int n, int m) {
    if (n == 1) {
        for (int i = 0; i < m; i++) {
            putchar('0' + i);
            putchar('\n');
        }
        return;
    }

    generateGrayCode(n - 1, m);

    for (int i = 0; i < m; i++) {
        for (int j = n - 2; j >= 0; j--) {
            putchar('0' + (i / (1 << j)) % m);
        }
        putchar('0' + i);
        putchar('\n');
    }
}

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

    generateGrayCode(n, m);

    return 0;
}

你可以将这段代码保存为一个名为 generalized_gray_code.c 的文件,然后使用 C 编译器进行编译并运行。输入两个整数 n 和 m,程序将输出任意一种长度为 n 的 m 进制广义格雷码方案,每个编码占一行。相邻两个编码相差一位,第一个编码和最后一个编码也算相邻。

第5题:菲波那契数列

菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。 给出一个正整数a,要求菲波那契数列中第a个数对10000取模的结果是多少。
时间限制:1000
内存限制:65536
输入
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1 <= a <= 1000000)。
输出
n行,每行输出对应一个输入。输出应是一个正整数,为菲波那契数列中第a个数对10000取模得到的结果。
样例输入
4
5
2
19
1
样例输出
5
1
181
1

在这个问题中,我们需要计算菲波那契数列中第 a 个数对 10000 取模的结果。为了避免计算过程中的溢出,我们可以使用循环来逐步计算菲波那契数列,并在每一步都对 10000 取模。

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

#include <stdio.h>

int fibonacciModulo(int a) {
    int prev = 0;
    int current = 1;

    for (int i = 2; i <= a; i++) {
        int temp = current;
        current = (prev + current) % 10000;
        prev = temp;
    }

    return current;
}

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

    for (int i = 0; i < n; i++) {
        int a;
        scanf("%d", &a);

        int result = fibonacciModulo(a);
        printf("%d\n", result);
    }

    return 0;
}

你可以将这段代码保存为一个名为 fibonacci_modulo.c 的文件,然后使用 C 编译器进行编译并运行。输入测试数据的组数 n,以及每组测试数据中的正整数 a,程序将输出菲波那契数列中第 a 个数对 10000 取模的结果,每个结果占一行。

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

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

相关文章

微服务中间件--Nacos

Nacos 1. Nacos入门a.服务注册到Nacosb.Nacos服务分级存储模型c.NacosRule负载均衡d.服务实例的权重设置e.环境隔离 - namespacef.Nacos和Eureka的对比 2. Nacos配置管理a.统一配置管理b.配置热更新c.多环境配置共享 1. Nacos入门 Nacos是阿里巴巴的产品&#xff0c;现在是Spr…

【前端|JS实战第1篇】使用JS来实现属于自己的贪吃蛇游戏!

前言 贪吃蛇游戏是经典的小游戏&#xff0c;也是学习前端JS的一个很好的练习项目。在本教程中&#xff0c;我们将使用 JavaScript 来逐步构建一个贪吃蛇游戏。我们会从创建游戏区域开始&#xff0c;逐步添加蛇的移动、食物的生成以及游戏逻辑等功能。 &#x1f680; 作者简介&a…

tcl学习之路(五)(Vivado时序约束)

1.主时钟约束 主时钟通常是FPGA器件外部的板机时钟或FPGA的高速收发器输出数据的同步恢复时钟信号等。下面这句语法大家一定不会陌生。该语句用于对主时钟的名称、周期、占空比以及对应物理引脚进行约束。 create_clock -name <clock_name> -periood <period> -wa…

电影《孤注一掷》感触、计算机底层二进制与十进制的转换

今天&#xff0c;我与媳妇一同在商场吃完午餐&#xff0c;正值天空绵绵细雨。近期&#xff0c;听闻一部名为《孤注一掷》的电影&#xff0c;其主人公是一位程序员&#xff0c;故事情节围绕境外电信诈骗展开&#xff0c;引发了广泛的关注。身为一名程序员&#xff0c;我对与电信…

DSO 系列文章(2)——DSO点帧管理策略

文章目录 1.点所构成的残差Residual的管理1.1.前端残差的状态1.2.后端点的残差的状态1.3.点的某个残差的删除 2.点Point的管理2.1.如何删除点——点Point的删除2.2.边缘化时删除哪些点&#xff1f; 3.帧FrameHessian的管理 DSO代码注释&#xff1a;https://github.com/Cc19245/…

Vulnhub: DriftingBlues: 2靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.207 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.207 80端口的/blog目录为wordpress wpscan收集wordpress用户和爆破密码 wpscan --url http://driftingblues.box/blog -e…

深入理解Linux内核--回收页框

页框回收算法 Linux中有一点很有意思&#xff0c;在为用户态进程与内核分配动态内存时&#xff0c;所作的检查是马马虎虎的。 比如&#xff0c;对单个用户所创建进程的RAM使用总量并不作严格检查(第三章的“进程资源限制”一节提到的限制只针对单个进程); 对内核使用的许多磁盘…

【数据结构】链表的回文结构

文章目录 &#x1f30f;引言&#x1f9ed;[链表的回文结构](https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tpId49&&tqId29370&rp1&ru/activity/oj&qru/ta/2016test/question-ranking)&#x1f6a9;&#x1f6a9;题目描述&#xf…

学习网络编程No.3【socket理论实战】

引言&#xff1a; 北京时间&#xff1a;2023/8/12/15:32&#xff0c;自前天晚上更新完文章&#xff0c;看了一下鹅厂新出的《扫毒3》摆烂至现在&#xff0c;不知道是长大了&#xff0c;还是近年港片就那样&#xff0c;给我的感觉不是很好&#xff0c;也可能是国内市场对港片不…

XXL-JOB任务调度中心后台命令执行漏洞

漏洞描述 XXL-JOB任务调度中心后台存在命令执行漏洞,攻击者可在后台通过写入shell命令任务调度获取服务器控制权限 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权…

AndroidAGP8.1.0和JDK 17迁移之旅

AndroidAGP8.1.0和JDK 17迁移之旅 前言&#xff1a; 由于我最近写demo的直接把之前的项目从AGP4.2.2升级到8.1.0引发了一些列问题&#xff0c;这里记录一下&#xff0c;前面讲解过迁移DSL方式遇到的问题&#xff0c;这次升级8.1.0也比之前顺利多了&#xff0c;想看DSL迁移的可…

Edge浏览器免费使用GPT3.5

搜索sider,安装Sidebar插件 注册账号即可每天免费使用30次。 Sider: ChatGPT侧边栏,GPT-4, 联网, 绘图

Excel VBA 复制除指定工作表外所有的工作表的内容到一张工作表中

当我们有一张表里面有很多sheet 具有相同的表结构&#xff0c;如果需要汇总到一张表中&#xff0c;那么我们可以借助VBA 去实现汇总自动化 Sub 复制所有工作表内容()Dim ws As WorksheetDim targetSheet As WorksheetDim lastRow As Long 设置目标表格&#xff0c;即要将所有…

SpringMVC之@RequestMapping注解

文章目录 前言一、RequestMapping介绍二、详解&#xff08;末尾附源码&#xff0c;自行测试&#xff09;1.RequestMapping注解的位置2.RequestMapping注解的value属性3.RequestMapping注解的method属性4.RequestMapping注解的params属性&#xff08;了解&#xff09;5.RequestM…

课程项目设计--项目建立--宿舍管理系统--springboot后端

前要 项目设计–宿舍管理系统 文章目录 项目建立导入依赖配置文件配置目录结构config配置mybatis-plusswagger 生成实体、mapper和servicebaseEntity统一响应实例响应码接口响应码接口实现统一响应result统一分页响应 项目建立 太长了&#xff0c;修改一下 导入依赖 暂时先加…

Java 项目日志实例:Log4j2

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ Apache Log4j 2 是对 Log4j 的升级&#xff0c;与其前身 Log4j 1.x 相比有了显着的改进&#xff0c;并提供了许多 Logback 可用的改进&#xff0c;同时支持 JCL 以及 SLF4J…

Word中对象方法(Methods)的理解及示例(上)

【分享成果&#xff0c;随喜正能量】奋斗没有终点,任何时候都是一个起点&#xff0c;沉潜是为了蓄势待发&#xff0c;沉潜是为了等待因缘。鲸豚沉潜于大海&#xff0c;幽兰深藏于山谷&#xff0c;能够经得起沉潜的人&#xff0c;才会有更高的成就。正如一年的树木只能当柴烧&am…

C++入门:函数缺省参数与函数重载

目录 1.函数缺省参数 1.1 缺省参数概念 1.2 缺省参数分类 2.函数重载 2.1 函数重载概念 2.2 C支持函数重载的原理 1.函数缺省参数 1.1 缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实 参则采用该形参的…

Unity 之 RaycastHit(存储射线投射操作)

文章目录 总述具体使用场景 总述 RaycastHit 类是 Unity 中的一个结构&#xff0c;用于存储射线投射操作的结果。射线投射是一种常用的技术&#xff0c;用于检测场景中的碰撞、获取碰撞点、获取碰撞对象的信息等。RaycastHit 提供了关于射线与场景中对象的交互信息&#xff0c…

新型Windows内核池风水利用工具研究

引用 这篇文章的目的是介绍一种新型基于内核态分页内存和非分页内存的越界写入通用利用技术和相关工具复现. 文章目录 引用简介分页模式利用分析分页模式利用调试分析非分页模式利用分析非分页模式利用调试分析工具使用方法工具使用效果相关引用参与贡献 简介 笔者的在原作者利…