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

news2025/1/9 22:36:08

在这里插入图片描述

第1题:找和为K的两个元素

在一个长度为n(n < 1000)的整数序列中,判断是否存在某两个元素之和为k。
输入
第一行输入序列的长度n和k,用空格分开。 第二行输入序列中的n个整数,用空格分开。
输出
如果存在某两个元素的和为k,则输出yes,否则输出no。
样例输入
9 10
1 2 3 4 5 6 7 8 9
样例输出
yes

下面是解决该问题的C语言代码示例:

#include <stdio.h>

int checkSum(int arr[], int n, int k) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = i + 1; j < n; j++) {
            if (arr[i] + arr[j] == k) {
                return 1; // 找到两个元素之和等于k,返回1
            }
        }
    }
    return 0; // 没有找到两个元素之和等于k,返回0
}

int main() {
    int n, k;
    scanf("%d %d", &n, &k); // 输入序列长度n和目标和k

    int arr[1000];
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]); // 输入整数序列
    }

    int result = checkSum(arr, n, k); // 检查是否存在和为k的两个元素

    if (result == 1) {
        printf("yes\n"); // 输出yes
    } else {
        printf("no\n"); // 输出no
    }

    return 0;
}

解题思路:

(1)读取输入:首先,从标准输入读取序列的长度n和目标和k。然后,使用一个数组存储这个序列的元素。

(2)检查和:使用两层嵌套循环遍历序列中所有可能的元素组合。对于每一对元素,检查它们的和是否等于目标和k。如果找到了和为k的两个元素,则返回1。

(3)输出结果:根据返回值判断是否存在和为k的两个元素。如果返回值为1,则输出"yes";如果返回值为0,则输出"no"。

通过以上步骤,我们可以判断一个序列中是否存在某两个元素之和为k,并按要求的格式输出结果。

第2题:硬币面值组合

使用1角、2角、5角硬币组成 n 角钱。 设1角、2角、5角的硬币各用了a、b、c个,列出所有可能的a, b, c组合。 输出顺序为:先按c的值从小到大,若c相同则按b的值从小到大。
输入
一个整数n(1 <= n <= 100),代表需要组成的钱的角数。
输出
输出有若干行,每行的形式为: i a b c 第1列i代表当前行数(行数从001开始,固定3个字符宽度,宽度不足3的用0填充),后面3列a, b, c分别代表1角、2角、5角硬币的个数(每个数字固定12个字符宽度,宽度不足的在左边填充空格)。
样例输入
10
样例输出
001 10 0 0
002 8 1 0
003 6 2 0
004 4 3 0
005 2 4 0
006 0 5 0
007 5 0 1
008 3 1 1
009 1 2 1
010 0 0 2

下面是解决该问题的C语言代码示例:

#include <stdio.h>

void printCombination(int n) {
    int count = 0; // 行数计数器

    for (int c = 0; c <= n / 5; c++) {
        for (int b = 0; b <= n / 2; b++) {
            int a = n - 5 * c - 2 * b; // 计算1角硬币个数

            if (a >= 0) {
                count++;
                printf("%03d %12d %12d %12d\n", count, a, b, c);
            }
        }
    }
}

int main() {
    int n;
    scanf("%d", &n); // 输入需要组成的钱的角数

    printCombination(n); // 输出硬币面值组合

    return 0;
}

解题思路:

(1)读取输入:从标准输入读取需要组成的钱的角数n。

(2)硬币面值组合:使用两层嵌套循环,其中外层循环变量c表示5角硬币的个数,在0到n/5的范围内遍历。内层循环变量b表示2角硬币的个数,在0到n/2的范围内遍历。计算1角硬币的个数a,通过n减去已经使用的5角和2角硬币数量。检查a是否大于等于0,如果是,则说明这个组合是有效的。

(3)输出结果:对于每个有效的组合,使用计数器count记录行数,并按要求的格式输出行数、1角、2角和5角硬币的个数。

通过以上步骤,我们可以列出所有可能的硬币面值组合,并按要求的格式输出结果。

第3题:分解因数

给出一个正整数a,要求分解成若干个正整数的乘积,即a = a1 * a2 * a3 * … * an,并且1 < a1 <= a2 <= a3 <= … <= an,问这样的分解的种数有多少。注意到a = a也是一种分解。
输入
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a (1 < a < 32768)
输出
n行,每行输出对应一个输入。输出应是一个正整数,指明满足要求的分解的种数
样例输入
2
2
20
样例输出
1
4

下面是解决该问题的C语言代码示例:

#include <stdio.h>

int factorize(int n) {
    int count = 0; // 分解的种数计数器

    // 在范围 1 到 n/2 内遍历可能的因子
    for (int i = 1; i <= n / 2; i++) {
        if (n % i == 0) {
            count++;
        }
    }

    count++; // 加上自身为因子的情况

    return count;
}

int main() {
    int n;
    scanf("%d", &n); // 输入测试数据的组数

    for (int i = 0; i < n; i++) {
        int a;
        scanf("%d", &a); // 输入正整数a

        int result = factorize(a); // 分解的种数

        printf("%d\n", result); // 输出结果
    }

    return 0;
}

解题思路:

(1)读取输入:首先,从标准输入读取测试数据的组数n。然后,使用一个循环读取每组测试数据,即正整数a。

(2)分解因数:使用循环从1到n/2的范围内遍历可能的因子,对于每个因子i,检查a是否可以被i整除。如果可以整除,则将分解的种数计数器count加1。

(3)输出结果:对于每组测试数据,输出分解的种数。

通过以上步骤,我们可以计算出给定正整数的分解种数,并按要求的格式输出结果。

第4题:苹果消消乐

有100个苹果和香蕉排成一条直线,其中有N个香蕉,你可以使用至多M次魔法道具将香蕉变成苹果,最后“最长的连续苹果数量”即为你本次苹果消消乐的得分,给定苹果和香蕉的排列,求你能获得的最大得分。
提示:这是个枚举题
输入
第一行是一个整数T(1 <= T <= 10),代表测试数据的组数。 每个测试数据第一行是2个整数N和M(0 <= N, M <= 100)。第二行包含N个整数a1, a2, … aN(1 <= a1 < a2 < … < aN <= 100),表示第a1, a2, … aN个位置上摆放的是香蕉。
输出
对于每组数据,输出通过使用魔法道具后你能获得的最大得分。
样例输入
3
5 1
34 77 82 83 84
5 2
10 30 55 56 90
5 10
10 30 55 56 90
样例输出
76
59
100

下面是解决该问题的C语言代码示例:

#include <stdio.h>

int getMaxScore(int apples[], int n, int m) {
    int maxScore = 0; // 最大得分

    // 枚举每个位置
    for (int i = 0; i < n; i++) {
        int score = 0; // 当前位置的得分

        // 使用魔法道具将香蕉变成苹果
        for (int j = i; j < n; j++) {
            if (apples[j] == 0 && m > 0) {
                m--;
                score++;
            } else if (apples[j] == 1) {
                score++;
            } else {
                break; // 遇到苹果跳出循环
            }
        }

        // 更新最大得分
        if (score > maxScore) {
            maxScore = score;
        }
    }

    return maxScore;
}

int main() {
    int T;
    scanf("%d", &T); // 输入测试数据的组数

    for (int i = 0; i < T; i++) {
        int N, M;
        scanf("%d %d", &N, &M); // 输入香蕉数量和魔法道具次数

        int apples[100] = {0}; // 初始化苹果和香蕉排列
        for (int j = 0; j < N; j++) {
            int position;
            scanf("%d", &position); // 输入香蕉位置
            apples[position - 1] = 1; // 标记该位置为香蕉
        }

        int result = getMaxScore(apples, 100, M); // 获取最大得分

        printf("%d\n", result); // 输出结果
    }

    return 0;
}

解题思路:

(1)读取输入:首先,从标准输入读取测试数据的组数T。然后,使用一个循环读取每组测试数据,即香蕉数量N和魔法道具次数M。接下来,读取N个整数,表示香蕉的位置。

(2)获取最大得分:对于每组测试数据,使用两层循环枚举每个位置,从当前位置开始使用魔法道具将香蕉变成苹果,直到遇到苹果或者魔法道具次数用完为止。在每个位置处,记录得分,并更新最大得分。

(3)输出结果:对于每组测试数据,输出最大得分。

通过以上步骤,我们可以计算出使用魔法道具后能获得的最大得分,并按要求的格式输出结果。

第5题:数列

用以下方式构造数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数a,要求数列中第a个数对1000取模的结果是多少。
输入
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1 <= a <= 1000000)。
输出
n行,每行输出对应一个输入。输出应是一个正整数,为数列中第a个数对1000取模得到的结果。
样例输入
4
5
2
19
1
样例输出
5
1
181
1

下面是解决该问题的C语言代码示例:

#include <stdio.h>

int getModulo(int a) {
    int first = 1; // 数列的第一个数
    int second = 1; // 数列的第二个数
    int result = 0; // 数列中第a个数对1000取模的结果

    if (a == 1 || a == 2) {
        return 1; // 数列的前两个数都为1
    }

    // 计算数列中第a个数
    for (int i = 3; i <= a; i++) {
        result = (first + second) % 1000; // 取模操作

        first = second;
        second = result;
    }

    return result;
}

int main() {
    int n;
    scanf("%d", &n); // 输入测试数据的组数

    for (int i = 0; i < n; i++) {
        int a;
        scanf("%d", &a); // 输入正整数a

        int result = getModulo(a); // 计算数列中第a个数对1000取模的结果

        printf("%d\n", result); // 输出结果
    }

    return 0;
}

解题思路:

(1)读取输入:首先,从标准输入读取测试数据的组数n。然后,使用一个循环读取每组测试数据,即正整数a。

(2)计算数列中第a个数:使用循环从第3个数开始计算数列中的数,每个数都等于前面两个数之和。使用两个变量firstsecond分别表示数列的前两个数,通过迭代更新这两个数,并计算出数列中第a个数对1000取模的结果。

(3)输出结果:对于每组测试数据,输出数列中第a个数对1000取模的结果。

通过以上步骤,我们可以计算出数列中第a个数对1000取模的结果,并按要求的格式输出结果。

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

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

相关文章

更换阿里云的yum源

更换阿里云的yum源 yum源存储的位置在&#xff1a; etc/yum.repos.d记住这个名字 CentOS-Base.repo对它进行备份&#xff0c;防止下载的yum源有问题 mv CentOS-Base.repo Back_up然后找到阿里云的yum源 如果没有wget 可以使用yum -y install wget 下载 wget http://mirrors…

数据分析经验总结-基础工具篇

一&#xff1a;Excel操作相关&#xff1a; 1.方便实用&#xff0c;但最大104W行&#xff0c;纯手工&#xff0c;无法沉淀数据处理流程&#xff0c;多表链接慢&#xff1b;不能为主流工具&#xff1b; 2.相关公式&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.c…

西门子SCALANCE W744-1PRO 客户端配置

. 安装西门子无线搜索软件PST。 无线SCALANCE W788-1PRO参数设置。 打开PST软件&#xff1a;选择Settings->Network Adapter->2本地连接 输入该无线设置的IP地址&#xff0c;进入网络访问界面。输入密码&#xff1a;admin&#xff0c;点击Log on进入。 填写本无线的SSI…

【探索C++】string类:更强大的字符串处理

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;软件配置等领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff01;送给自己和读者的…

SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)

在上一篇文章讲述zuul的时候&#xff0c;已经提到过&#xff0c;使用配置服务来保存各个服务的配置文件。它就是Spring Cloud Config。 一、简介 在分布式系统中&#xff0c;由于服务数量巨多&#xff0c;为了方便服务配置文件统一管理&#xff0c;实时更新&#xff0c;所以需…

Linux网络编程1(网络基础定义)

网络早已成为我们日常生活的一部分&#xff0c;经常使用互联网的人很难长时间内离开互联网。你是否好奇你的电脑仅仅插上一根网线&#xff0c;你发给朋友的聊天信息就能准确无误的到达朋友的手机或者电脑上&#xff0c;你是否好奇为何你仅仅在浏览器输入一个网址&#xff0c;点…

动态不确定性的动态S过程(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

基于MATLAB开发AUTOSAR软件应用层Code mapping专题-part 7 Function callers标签页介绍

不知不觉这个code-mapping专题已经写了6篇文章了,今天是我们这个专题的最后一篇文章了介绍Function callers 这个其实很简单,以前的文章里也有提到CS接口实现两个SWC之间的CS调用,我们在从Code-mapping的角度在说下 首先还是看下模型 我们还记得在simulink里我们用function…

选择排序:用C语言打造高效的排序算法

本篇博客会讲解如何使用C语言实现选择排序。 下面我来画图讲解选择排序的思路。 假设有一个数组&#xff0c;其初始状态如下&#xff0c;我们想把这个数组排成升序。 首先我们标明范围&#xff0c;即[begin, end]&#xff0c;一开始begin(b)和end(e)分别表示数组的第一个位置…

【黑马头条之热点文章kafkaStream】

本笔记内容为黑马头条项目的热点文章-实时计算部分 目录 一、实时流式计算 1、概念 2、应用场景 3、技术方案选型 二、Kafka Stream 1、概述 2、Kafka Streams的关键概念 3、KStream 4、Kafka Stream入门案例编写 5、SpringBoot集成Kafka Stream 三、app端热点文章…

验证码识别DLL ,滑块识别SDK,OCR图片转文字,机器视觉找物品

验证码识别DLL ,滑块识别SDK 你们用过哪些OCR提取文字&#xff0c;识图DLL&#xff0c;比如Opencv,Labview机器视觉找物品之类&#xff1f;

数据库第十五课-------------非关系型数据库----------Redis

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

第三方软件测试都有哪些?

第三方软件测试 第三方软件测试是一种软件测试活动&#xff0c;旨在确保软件的质量、功能、性能和安全性等方面符合预期要求。 一、以下是一些常见的第三方软件测试类型&#xff1a; 兼容性测试&#xff1a;测试软件在不同操作系统、浏览器、数据库等环境下的兼容性。 功能测…

计费时间与非计费时间:工时表如何帮助你平衡两者?

正确分配时间是企业管理员工的必要条件&#xff0c;这意味着了解并了解如何管理计费时间和非计费时间。更重要的是&#xff0c;需要能够在两者之间找到适当的平衡&#xff0c;这样才能最大限度地提高生产力、消除业务中的低效率并提高利润。 什么是计费时间和非计费时间&#x…

Python“牵手”天眼查、企查查、启信宝企业数据API接口运用场景及功能介绍

天眼查企业信用查询app是一款企业数据信息查询软件&#xff0c;专注服务于个人与企业信息查询,是人人都在用的商业安全工具。本软件整合了国内所有企业数据信息&#xff0c;用户可以使用这款软件查询企业单位相关信息&#xff0c;只要在线输入企业名称&#xff0c;就可以为您搜…

网络互联与互联网 - TCP 协议详解

文章目录 1 概述2 TCP 传输控制协议2.1 报文格式2.2 三次握手&#xff0c;建立连接2.3 四次挥手&#xff0c;释放连接 3 扩展3.1 实验演示3.2 网工软考 1 概述 在 TCP/IP 协议簇 中有两个传输协议 TCP&#xff1a;Transmission Control Protocol&#xff0c;传输控制协议&…

每日后端面试5题 第八天

1.UDP和TCP协议的区别 1.UDP无连接&#xff0c;速度快&#xff0c;安全性低&#xff0c;适合高速传输、实时广播通信等。 2.TCP面向连接&#xff0c;速度慢&#xff0c;安全性高&#xff0c;适合传输质量要求高、大文件等的传输&#xff0c;比如邮件发送等。 &#xff08;还…

C语言学习系列-->【关于qsort函数的详解以及它的模拟实现】

文章目录 一、概述二、qsort函数参数介绍三、qsort实现排序3.1 qsort实现整型数组排序3.2 qsort实现结构体数组排序 四、模拟实现qsort函数 一、概述 对数组的元素进行排序 对数组中由 指向的元素进行排序&#xff0c;每个元素字节长&#xff0c;使用该函数确定顺序。 此函数使…

Vue中ElementUI结合transform使用时,发现弹框定位不准确问题

在近期开发中&#xff0c;需要将1920*1080放到更大像素大屏上演示&#xff0c;所以需要使用到transform来对页面进行缩放&#xff0c;但是此时发现弹框定位出错问题&#xff0c;无法准备定位到实际位置。 查看element-ui官方文档无果后&#xff0c;打算更换新的框架进行开发&am…