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

news2025/1/14 18:02:42

在这里插入图片描述

第1题:和数

给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。
时间限制:10000
内存限制:65536
输入
共两行,第一行是数列中数的个数n ( 1 <= n <= 100),第二行是由n个不大于10000的正整数组成的数列,相邻两个整数之间用单个空格隔开。
输出
一个整数,即数列中等于其他两个数之和的数的个数。
样例输入
4
1 2 3 4
样例输出
2

要解决这个问题,我们可以使用两层循环来遍历数列中的元素,并在内层循环中检查当前元素是否等于其他两个元素的和。如果是,则将计数器加1。

下面是使用C语言编写的解题代码:

#include <stdio.h>

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

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

    int count = 0;
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            for (int k = 0; k < n; k++) {
                if (k != i && k != j && arr[k] == arr[i] + arr[j]) {
                    count++;
                    break;
                }
            }
        }
    }

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

    return 0;
}

在上述代码中,我们首先读取输入的数列长度 n,然后读取数列中的元素并存储在数组 arr 中。

接下来,我们使用两层循环来遍历数列中的元素。外层循环控制第一个相加的数 arr[i],内层循环控制第二个相加的数 arr[j],其中 ji+1 开始以避免重复计算。在内层循环中,我们使用另一个循环遍历数列中的元素 arr[k],并检查是否存在一个不等于 arr[i]arr[j] 的元素等于它们的和 arr[i] + arr[j]。如果存在,则将计数器 count 加1,并跳出内层循环。

最后,我们输出计数器 count 的值作为结果。

编译并运行上述代码可以解决该问题。你可以使用 C 语言编译器将代码保存为 .c 文件,然后编译并运行该文件来获取结果。

第2题:质数的和与积

两个质数的和是S,它们的积最大是多少?
时间限制:10000
内存限制:65536
输入
一个不大于10000的正整数S,为两个质数的和。
输出
一个整数,为两个质数的最大乘积。数据保证有解。
样例输入
50
样例输出
589

要解决这个问题,我们可以使用一个函数来判断一个数是否为质数。然后,我们可以从S开始递减,找到最大的两个质数使它们的和等于S,并计算它们的乘积。

下面是使用C语言编写的解题代码:

#include <stdio.h>
#include <stdbool.h>

bool isPrime(int num) {
    if (num <= 1) {
        return false;
    }

    for (int i = 2; i * i <= num; i++) {
        if (num % i == 0) {
            return false;
        }
    }

    return true;
}

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

    int maxProduct = 0;

    for (int i = S / 2; i >= 2; i--) {
        if (isPrime(i) && isPrime(S - i)) {
            maxProduct = i * (S - i);
            break;
        }
    }

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

    return 0;
}

在上述代码中,我们首先定义了一个函数 isPrime 来判断一个数是否为质数。该函数接收一个正整数 num,如果 num 小于等于1,则返回 false。否则,我们使用一个循环从2开始遍历到 num 的平方根,检查是否存在一个数能整除 num。如果存在,则 num 不是质数,返回 false。如果循环结束后仍未找到可以整除 num 的数,则 num 是质数,返回 true

在主函数中,我们首先读取输入的和 S,然后从 S/2 开始递减到2。在每次迭代中,我们检查当前数 i 是否为质数,并且 S - i 也是质数。如果满足条件,则计算 iS - i 的乘积,并将其赋值给 maxProduct。然后跳出循环。

最后,我们输出 maxProduct 的值作为结果。

编译并运行上述代码可以解决该问题。你可以使用 C 语言编译器将代码保存为 .c 文件,然后编译并运行该文件来获取结果。

第3题:爬楼

已知楼梯的数量,可以每次走2级或者3级,求不同的走法数
例如:楼梯一共有7级,一共3种方法:2 2 3或者 2 3 2 或者 3 2 2。
时间限制:1000
内存限制:65536
输入
输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= N <= 50。 最后一行为0,表示测试结束。
输出
不同的走法数,每一行输入对应一行输出
样例输入
7
0
样例输出
3

要解决这个问题,我们可以使用递归来计算不同的走法数。每次递归,我们可以选择走2级或3级,直到达到目标楼梯级数。

下面是使用C语言编写的解题代码:

#include <stdio.h>

int countWays(int n) {
    if (n == 0 || n == 1) {
        return 1;
    } else if (n == 2) {
        return 2;
    } else if (n == 3) {
        return 3;
    } else {
        return countWays(n - 2) + countWays(n - 3);
    }
}

int main() {
    int N;

    while (1) {
        scanf("%d", &N);

        if (N == 0) {
            break;
        }

        int ways = countWays(N);
        printf("%d\n", ways);
    }

    return 0;
}

在上述代码中,我们定义了一个递归函数 countWays 来计算不同的走法数。该函数接收一个参数 n,代表当前楼梯级数。如果 n 为0或1,表示已经到达目标楼梯,返回1。如果 n 为2,表示剩余2级楼梯可以走2次,返回2。如果 n 为3,表示剩余3级楼梯可以走3次,返回3。否则,我们可以选择先走2级楼梯,然后递归计算剩余 n-2 级楼梯的走法数,或者选择先走3级楼梯,然后递归计算剩余 n-3 级楼梯的走法数。最后,将两种情况的走法数相加作为结果返回。

在主函数中,我们使用一个循环来读取输入的楼梯级数 N,如果 N 为0,则表示测试结束,跳出循环。否则,我们调用 countWays 函数计算不同的走法数,并将结果输出。

编译并运行上述代码可以解决该问题。你可以使用 C 语言编译器将代码保存为 .c 文件,然后编译并运行该文件来获取结果。

第4题:生成括号

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

要解决这个问题,我们可以使用递归来生成所有合法的括号组合。每次递归,我们可以选择放置一个左括号或右括号,但需要满足以下条件:左括号的数量不能超过N,右括号的数量不能超过左括号的数量。

下面是使用C语言编写的解题代码:

#include <stdio.h>

void generateParentheses(int leftCount, int rightCount, int n, char* current, int index) {
    if (leftCount == n && rightCount == n) {
        current[index] = '\0';
        printf("%s\n", current);
        return;
    }

    if (leftCount < n) {
        current[index] = '(';
        generateParentheses(leftCount + 1, rightCount, n, current, index + 1);
    }

    if (rightCount < leftCount) {
        current[index] = ')';
        generateParentheses(leftCount, rightCount + 1, n, current, index + 1);
    }
}

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

    char parentheses[20];
    generateParentheses(0, 0, N, parentheses, 0);

    return 0;
}

在上述代码中,我们定义了一个递归函数 generateParentheses 来生成所有合法的括号组合。该函数接收五个参数:leftCount 表示当前已放置的左括号的数量,rightCount 表示当前已放置的右括号的数量,n 表示括号的对数,current 是一个字符数组,用于存储当前的括号组合,index 表示当前要放置括号的位置。

在递归函数中,我们首先判断是否已经放置了 n 对括号(即左括号数量和右括号数量都等于 n)。如果是,则当前括号组合已经生成完毕,将 current 数组末尾设置为字符串结束符 \0,然后输出当前括号组合。

否则,我们可以选择放置一个左括号。在 current 数组的当前位置 index 放置一个左括号,并递归调用 generateParentheses 函数,同时将左括号的数量加1。

然后,我们检查是否可以放置一个右括号。只有当已放置的右括号数量小于当前已放置的左括号数量时,我们才可以放置一个右括号。在 current 数组的当前位置 index 放置一个右括号,并递归调用 generateParentheses 函数,同时将右括号的数量加1。

在主函数中,我们首先读取输入的括号对数 N。然后,我们定义一个字符数组 parentheses 来存储括号组合,初始时为空。接下来,我们调用 generateParentheses 函数,并传入初始的左括号数量、右括号数量、括号对数、parentheses 数组和初始的位置索引。

编译并运行上述代码可以解决该问题。你可以使用 C 语言编译器将代码保存为 .c 文件,然后编译并运行该文件来获取结果。

第5题:铺砖

对于一个2行N列的走道。现在用12,22的砖去铺满。问有多少种不同的方式。
时间限制:3000
内存限制:131072
输入
整个测试有多组数据,请做到文件底结束。每行给出一个数字N,0 <= n <= 250
输出
如题
样例输入
2
8
12
100
200
样例输出
3
171
2731
845100400152152934331135470251
1071292029505993517027974728227441735014801995855195223534251

要解决这个问题,我们可以使用动态规划来计算不同的铺砖方式。我们可以定义一个数组 dp,其中 dp[i] 表示铺满一行长度为 2*i 的走道的不同铺砖方式数。

根据题目要求,我们可以有两种方式来铺满走道的一行:使用一块 1x2 的砖或者使用一块 2x2 的砖。

对于 dp[i],我们可以考虑最后铺砖的方式是使用一块 1x2 的砖,这样我们需要在 dp[i-1] 的基础上铺上这块砖。或者考虑最后铺砖的方式是使用一块 2x2 的砖,这样我们需要在 dp[i-2] 的基础上铺上这块砖。因此,我们可以得到递推关系:dp[i] = dp[i-1] + dp[i-2]

注意,初始情况下,当走道长度为0时,即 dp[0] = 1,表示不需要铺砖的方式数为1。

下面是使用C语言编写的解题代码:

#include <stdio.h>

unsigned long long int dp[251] = {0};

void calculateDP() {
    dp[0] = 1;
    dp[1] = 1;
    dp[2] = 3;

    for (int i = 3; i <= 250; i++) {
        dp[i] = dp[i - 1] + dp[i - 2];
    }
}

int main() {
    calculateDP();

    int N;

    while (scanf("%d", &N) == 1) {
        printf("%llu\n", dp[N]);
    }

    return 0;
}

在上述代码中,我们首先定义一个数组 dp,用于存储不同的铺砖方式数。然后,我们定义了一个函数 calculateDP 来计算 dp 数组的值。在该函数中,我们通过遍历从 3 到 250 的走道长度,根据递推关系 dp[i] = dp[i-1] + dp[i-2] 计算不同的铺砖方式数。

在主函数中,我们首先调用 calculateDP 函数来计算 dp 数组。然后,我们使用一个循环来读取输入的走道长度 N,并输出对应的不同铺砖方式数 dp[N]

编译并运行上述代码可以解决该问题。你可以使用 C 语言编译器将代码保存为 .c 文件,然后编译并运行该文件来获取结果。

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

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

相关文章

飞天使-k8s基础组件分析-控制器

文章目录 控制器含义解释pod的标签与注释ReplicaControllerReplicaSetDeploymentsDaemonSetJobCronjob参考文档 控制器含义解释 空调遥控器知道吧ReplicationController: ReplicationController确保在任何时候都运行指定数量的pod副本。换句话说&#xff0c;一个ReplicationCo…

DRF ImageFiled字段时会加上域名和乱码的问题

问题描述&#xff1a; 一张表的image类型为imageFiled # ############################### 商品 ############################### class Category(models.Model):"""类别名称比如&#xff1a;螃蟹、大米、油等"""categoryname models.CharFie…

Unity 之`Physics.Raycast()`方法,射线检测

文章目录 总述参数解释形参前两个变量可以用Ray 来代替 返回值 总述 当你在Unity中使用Physics.Raycast()方法时&#xff0c;你实际上是在进行一种射线检测&#xff0c;以查看一条射线是否与场景中的碰撞体相交。这可以用来实现很多不同的功能&#xff0c;如点击选择物体、射击…

Windows如何安装Git

一、简介 Git 是一个开源的分布式版本控制系统&#xff0c;是目前世界上最先进、最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理。特点&#xff1a;项目越大越复杂&#xff0c;协同开发者越多&#xff0c;越能体现出 Git 的高性能和高可用性。 二、…

31、springboot 配置HTTP服务端口及如何通过WebServer实例动态获取项目中的HTTP端口

配置HTTP服务端口及如何通过WebServer实例动态获取项目中的HTTP端口 ★ 设置HTTP服务端口&#xff1a; - server.port或者SERVER_PORT环境变量——总结来说&#xff0c;其实就是要配置server.port外部配置属性。▲ 同样遵守如下优先级&#xff1a; 这些都是外部配置源&#x…

探索Vue生命周期钩子函数:从创生到销毁

Vue这个引领前端开发潮流的框架&#xff0c;其优雅的响应式数据绑定和组件式开发方式&#xff0c;使得它备受瞩目。然而&#xff0c;Vue的魅力绝不仅限于此&#xff0c;它还赋予开发者一组神奇的生命周期钩子函数&#xff0c;能够在组件的各个成长阶段插入自定义代码。本文将带…

css 实现四角边框样式

效果如图 此图只实现 左下与右下边角样式 右上与左上同理 /* 容器 */ .card-mini {position: relative; } /* 左下*/ .card-mini::before {content: ;position: absolute;left: 0;bottom: 0;width: 20px;height: 20px;border-bottom: 2px solid #253d64;border-left: 2px so…

赴日程序员学日语需要学多久?

现在很多国内程序员想转型做赴日IT&#xff0c;但是因为完全没有日语经验&#xff0c;又长期从事解决问题debug的工作&#xff0c;所以非常担心自己学不会日语。其实你的心底里可能比较担心是&#xff0c;投入了很多时间发现学不会文科类型的语言&#xff0c;自己没有学母语以外…

[保研/考研机试] KY124 二叉搜索树 浙江大学复试上机题 C++实现

题目链接&#xff1a; 二叉搜索树_牛客题霸_牛客网判断两序列是否为同一二叉搜索树序列。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/437195121692722892652 描述 判断两序列是否为同一二叉搜索树序列 输入描述&#xff1a; 开始一个数n&#xff0c;(1<…

Python数据采集实战-使用BeautifulSoup框架解析HTML文档并提取所需内容(附源码和实现效果)

实现功能 使用BeautifulSoup框架解析HTML文档并提取所需内容的例子&#xff1a;假设我们要从以下HTML文档中提取所有超链接的链接地址 实现代码 from bs4 import BeautifulSoup import requests# 发送请求并获取HTML文档 url "https://www.baidu.com" response r…

c(Bua-Cpa-Thi-Val-Asn-Cys)-Pro-d-Arg-NEt2 acetate,1647120-04-4,试剂特点介绍

英文名&#xff1a;c(Bua-Cpa-Thi-Val-Asn-Cys)-Pro-d-Arg-NEt2 acetate CAS&#xff1a;1647120-04-4 1.Molecular formula&#xff1a;C44H64ClN11O10S2 2.Molecular weight&#xff1a;1006.63 3.Packaging specification&#xff1a;1g、5g、10g, flexible packaging, inc…

宠物小程序开发

在当今社会&#xff0c;宠物已成为许多人生活中不可或缺的一部分。宠物市场的持续增长为创业者提供了巨大的商机。然而&#xff0c;作为一个创业者&#xff0c;要在竞争激烈的宠物市场中脱颖而出并不容易。因此&#xff0c;开发一个专属于自己的宠物小程序成为了解决这一难题的…

Linux下的Shell编程——Shell概述和入门(一)

前言&#xff1a; Shell还是一个功能相当强大的编程语言&#xff0c;易编写、易调试、灵活性强。为了方便后续的学习&#xff0c;我们需要学习在Linux系统下的Shell编程 目录 一、Shell概述 1.Linux 提供的 Shell 解析器有 2. 默认的解析器是 bash 二、Shell 脚本入门 1.脚…

php+echarts实现数据可视化实例3

效果 全部代码 <?php include(includes/session.inc); include(includes/SQL_CommonFunctions.inc); ?> <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" …

OpenGL —— 2.2、Shader之间数据传输、向Shder传输数据

Shader OpenGL着色器&#xff08;shader&#xff09;是一种用于编写图形渲染代码的编程语言。它们在图形处理单元&#xff08;GPU&#xff09;上运行&#xff0c;用于控制渲染管线的不同阶段。 在OpenGL中&#xff0c;有两种主要类型的着色器&#xff1a;顶点着色器和片段着色器…

Linux 压缩解压(归档管理):tar命令

计算机中的数据经常需要备份&#xff0c;tar是Unix/Linux中最常用的备份工具&#xff0c;此命令可以把一系列文件归档到一个大文件中&#xff0c;也可以把档案文件解开以恢复数据。 tar使用格式 tar [参数] 打包文件名 文件 tar命令很特殊&#xff0c;其参数前面可以使用“-”&…

windows端口被占用——使用taskkill干掉不听话的进程

8080端口被占用为例 1. win R 输入 cmd 回车 进入命令行界面 2. 查看端口占用情况 netstat -aon|findstr 8080 查到8080被24308 进程占用 3. 杀手父进程 使用taskkill 干掉不听话的进程 taskkill /f /t /pid 24308 C:\Users\84869>taskkill /?TASKKILL [/S system…

用户端Web自动化测试-L2

目录&#xff1a; 高级定位-css高级定位-xpath显式等待高级使用高级控件交互方法网页 frame 与多窗口处理文件上传&#xff0c;弹框处理自动化关键数据记录电子商务产品实战 1.高级定位-css css 选择器概念 css 选择器有自己的语法规则和表达式css 定位通常分为绝对定位和相…

k8s-dashboard使用指导手册

一、访问 dashboard http://172.66.209.101:32001 二、选择 Namespace 如下图&#xff1a; 1 在①搜索框中输入 spms 2 在②选择 spms-cloud 三、查找 pod 1 打开 pod 列表 2 打开过滤窗口 3 搜索 pod 在打开的搜索框中输入 pod的关键字&#xff0c;支持模糊搜索 如搜索…

春秋云镜 CVE-2019-16692

春秋云镜 CVE-2019-16692 phpIPAM 1.4 - SQL Injection 靶标介绍 phpIPAM 1.4后台存在SQL Injection。 启动场景 漏洞利用 后台SQL注入&#xff0c;admin/admin888登陆成功。 exp POST /app/admin/routing/edit-bgp-mapping-search.php HTTP/1.1 Host: xxx.com Content-Le…