电子学会C++编程等级考试2023年05月(二级)真题解析

news2025/5/23 21:27:45

在这里插入图片描述

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

第1题:数字放大

给定一个整数序列以及放大倍数x,将序列中每个整数放大x倍后输出。
时间限制:1000
内存限制:65536
输入
包含三行: 第一行为N,表示整数序列的长度(N ≤ 100); 第二行为N个整数(不超过整型范围),整数之间以一个空格分开; 第三行包含一个整数(不超过整型范围),为指定的整数x。
输出
N个整数,为原序列放大之后的序列,整数之间以一个空格分开。
样例输入
3
1 5 7
2
样例输出
2 10 14

以下是解决该问题的完整C++代码和解析过程:

#include <iostream>

int main() {
    int N;
    std::cin >> N;

    int sequence[N];
    for (int i = 0; i < N; i++) {
        std::cin >> sequence[i];
    }

    int x;
    std::cin >> x;

    for (int i = 0; i < N; i++) {
        sequence[i] *= x;
        std::cout << sequence[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

解析过程如下:

  1. 首先,包含 <iostream> 头文件,这是用于输入和输出的标准库。

  2. main() 函数中,声明一个整数变量 N,用于存储整数序列的长度。

  3. 使用 std::cin 对象,通过输入流操作符 >> 将输入的整数序列的长度赋值给变量 N

  4. 声明一个大小为 N 的整数数组 sequence,用于存储整数序列。

  5. 使用 for 循环遍历数组,循环变量 i 从0到 N-1

  6. 在循环中,使用 std::cin 对象,通过输入流操作符 >> 依次将输入的整数赋值给数组 sequence 的每个元素。

  7. 声明一个整数变量 x,用于存储放大倍数。

  8. 使用 std::cin 对象,通过输入流操作符 >> 将输入的放大倍数赋值给变量 x

  9. 使用 for 循环遍历数组,循环变量 i 从0到 N-1

  10. 在循环中,将数组 sequence 的每个元素乘以放大倍数 x,并将结果存回相应的数组元素。

  11. 使用 std::cout 对象和输出流操作符 <<,在循环中输出数组 sequence 的每个元素,之间用一个空格分隔。

  12. 在输出循环结束后,使用 std::endl 输出一个换行符,使输出结果换行。

  13. return 0; 表示程序正常结束。

  14. 在运行程序时,按照题目要求输入整数序列的长度 N、整数序列和放大倍数 x

  15. 程序将对整数序列中的每个整数进行放大操作,然后输出放大后的序列。

例如,对于样例输入 31 5 72,程序将对整数序列 1 5 7 中的每个整数进行放大2倍,得到 2 10 14,然后输出结果为 2 10 14

第2题:单词倒排

编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔。
时间限制:10000
内存限制:65536
输入
输入为一个字符串(字符串长度至多为100)。
输出
输出为按要求排序后的字符串。
样例输入
I am a student
样例输出
student a am Ie

以下是一个解决该问题的C++代码示例:

#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>

int main() {
    std::string input;
    std::getline(std::cin, input);

    std::istringstream iss(input);
    std::vector<std::string> words;

    std::string word;
    while (iss >> word) {
        words.push_back(word);
    }

    std::reverse(words.begin(), words.end());

    for (const std::string& w : words) {
        std::cout << w << " ";
    }
    std::cout << std::endl;

    return 0;
}

解析过程如下:

  1. 首先,包含 <iostream> 头文件,这是用于输入和输出的标准库。

  2. 包含 <sstream> 头文件,这是用于字符串流操作的标准库。

  3. 包含 <vector> 头文件,这是用于存储动态数组的标准库。

  4. 包含 <algorithm> 头文件,这是用于算法操作的标准库。

  5. main() 函数中,声明一个字符串变量 input,用于存储输入的字符串。

  6. 使用 std::getline() 函数从标准输入中读取一行字符串,并将其存入变量 input 中。

  7. 声明一个 std::istringstream 对象 iss,用于将字符串 input 转换为字符串流。

  8. 声明一个 std::vector<std::string> 容器 words,用于存储分解后的单词。

  9. 声明一个字符串变量 word,用于临时存储每个单词。

  10. 使用 while 循环,通过字符串流 iss 逐个读取单词,并将其存入容器 words 中,直到字符串流 iss 读取完所有单词。

  11. 使用 std::reverse() 函数将容器 words 中的单词顺序进行倒排操作。

  12. 使用 for 循环遍历容器 words,循环变量 w 表示容器中的每个单词。

  13. 在循环中,输出单词 w,使用 std::cout 对象和输出流操作符 <<

  14. 在输出循环结束后,使用 std::endl 输出一个换行符,使输出结果换行。

  15. return 0; 表示程序正常结束。

  16. 在运行程序时,按照题目要求输入一个字符串。

  17. 程序将对输入的字符串进行分解、倒排操作,并输出结果。

例如,对于样例输入 "I am a student",程序将将字符串分解为单词 "I", "am", "a", "student",然后进行倒排操作得到 "student", "a", "am", "I",最终输出结果为 "student a am I"

第3题:计算矩阵边缘元素之和

所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。
时间限制:10000
内存限制:65536
输入
第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以一个空格分开。 接下来输入的m行数据中,每行包含n个整数,整数之间以一个空格分开。
输出
输出对应矩阵的边缘元素和
样例输入
3 3
3 4 1
3 7 1
2 0 1
样例输出
15

以下是一个解决该问题的C++代码示例:

#include <iostream>
#include <vector>

int main() {
    int m, n;
    std::cin >> m >> n;

    std::vector<std::vector<int>> matrix(m, std::vector<int>(n));

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            std::cin >> matrix[i][j];
        }
    }

    int sum = 0;

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

    std::cout << sum << std::endl;

    return 0;
}

解析过程如下:

  1. 首先,包含 <iostream> 头文件,这是用于输入和输出的标准库。

  2. 包含 <vector> 头文件,这是用于存储动态数组的标准库。

  3. main() 函数中,声明两个整数变量 mn,用于存储矩阵的行数和列数。

  4. 使用 std::cin 对象,通过输入流操作符 >> 将输入的行数 m 和列数 n 分别赋值给变量 mn

  5. 声明一个二维整数向量 matrix,大小为 mn 列,用于存储矩阵的元素。

  6. 使用两个嵌套的 for 循环,循环变量 i 从0到 m-1,循环变量 j 从0到 n-1

  7. 在循环中,使用 std::cin 对象,通过输入流操作符 >> 依次将输入的整数赋值给矩阵 matrix 的每个元素。

  8. 声明一个整数变量 sum,用于存储边缘元素之和,初始值为0。

  9. 使用两个嵌套的 for 循环,循环变量 i 从0到 m-1,循环变量 j 从0到 n-1

  10. 在循环中,使用条件判断语句判断当前元素是否位于矩阵的边缘,即判断 i 是否为0或 m-1,以及判断 j 是否为0或 n-1

  11. 如果当前元素位于矩阵的边缘,则将其值累加到 sum 中。

  12. 使用 std::cout 对象和输出流操作符 <<,输出变量 sum 的值。

  13. 在输出后,使用 std::endl 输出一个换行符,使输出结果换行。

  14. return 0; 表示程序正常结束。

  15. 在运行程序时,按照题目要求输入矩阵的行数 m、列数 n,以及矩阵的元素。

  16. 程序将计算矩阵的边缘元素之和,并输出结果。

例如,对于样例输入 3 33 4 13 7 12 0 1,程序将计算矩阵边缘元素之和为 15,然后输出结果为 15

第4题:奇数单增序列

给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出。
时间限制:1000
内存限制:65536
输入
共2行: 第1行为 N; 第2行为 N 个正整数,其间用空格间隔。
输出
增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。
样例输入
10
1 3 2 6 5 4 9 8 7 10
样例输出
1,3,5,7,9

以下是一个解决该问题的C++代码示例:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    int N;
    std::cin >> N;

    std::vector<int> numbers(N);

    for (int i = 0; i < N; i++) {
        std::cin >> numbers[i];
    }

    std::vector<int> oddNumbers;

    for (int i = 0; i < N; i++) {
        if (numbers[i] % 2 != 0) {
            oddNumbers.push_back(numbers[i]);
        }
    }

    std::sort(oddNumbers.begin(), oddNumbers.end());

    for (int i = 0; i < oddNumbers.size(); i++) {
        std::cout << oddNumbers[i];
        if (i != oddNumbers.size() - 1) {
            std::cout << ",";
        }
    }

    std::cout << std::endl;

    return 0;
}

解析过程如下:

  1. 首先,包含 <iostream> 头文件,这是用于输入和输出的标准库。

  2. 包含 <vector> 头文件,这是用于存储动态数组的标准库。

  3. 包含 <algorithm> 头文件,这是用于算法操作的标准库。

  4. main() 函数中,声明一个整数变量 N,用于存储序列的长度。

  5. 使用 std::cin 对象,通过输入流操作符 >> 将输入的长度 N 赋值给变量 N

  6. 声明一个整数向量 numbers,大小为 N,用于存储正整数序列的元素。

  7. 使用一个 for 循环,循环变量 i 从0到 N-1

  8. 在循环中,使用 std::cin 对象,通过输入流操作符 >> 依次将输入的整数赋值给向量 numbers 的每个元素。

  9. 声明一个整数向量 oddNumbers,用于存储选取出的奇数。

  10. 使用一个 for 循环,循环变量 i 从0到 N-1

  11. 在循环中,使用条件判断语句判断当前元素是否为奇数,即判断 numbers[i] 是否为奇数。

  12. 如果当前元素为奇数,则将其添加到向量 oddNumbers 中。

  13. 使用 std::sort() 函数对向量 oddNumbers 进行升序排序。

  14. 使用一个 for 循环,循环变量 i 从0到 oddNumbers 的大小减1。

  15. 在循环中,使用 std::cout 对象和输出流操作符 <<,依次输出 oddNumbers[i] 的值。

  16. 在每个输出之后,使用条件判断语句判断是否为最后一个元素,如果不是,则输出逗号 ,

  17. 在输出循环结束后,使用 std::endl 输出一个换行符,使输出结果换行。

  18. return 0; 表示程序正常结束。

  19. 在运行程序时,按照题目要求输入序列的长度 N,以及序列的元素。

  20. 程序将从输入序列中选取出奇数,并按升序输出。

例如,对于样例输入 101 3 2 6 5 4 9 8 7 10,程序将选取出奇数 1, 3, 5, 7, 9 并按升序排序,然后输出结果为 1,3,5,7,9

第5题:实数加法

求两个实数相加的和。
题目中输入输出里出现的浮点数都有如下的形式: P1P2…Pi.Q1Q2…Qj。对于整数部分,P1P2…Pi是一个非负整数且当整数部分不为0时,P1不等于0;对于小数部分,Qj不等于0。
时间限制:1000
内存限制:65536
输入
2行,每行是一个加数。每个加数的长度不超过100。
输出
一行,即相应的和。输出保证一定是一个小数部分不为0的实数。
样例输入
0.111111111111111111111111111111
0.111111111111111111111111111111
样例输出
0.222222222222222222222222222222

以下是一个解决该问题的C++代码示例:

#include <iostream>
#include <string>

std::string addRealNumbers(const std::string& num1, const std::string& num2) {
    std::string result;
    int carry = 0;
    int i = num1.size() - 1;
    int j = num2.size() - 1;

    while (i >= 0 || j >= 0 || carry > 0) {
        int digit1 = i >= 0 ? num1[i] - '0' : 0;
        int digit2 = j >= 0 ? num2[j] - '0' : 0;
        int sum = digit1 + digit2 + carry;
        carry = sum / 10;
        int digit = sum % 10;
        result = std::to_string(digit) + result;
        i--;
        j--;
    }

    return result;
}

int main() {
    std::string num1, num2;
    std::cin >> num1 >> num2;

    std::string sum = addRealNumbers(num1, num2);

    std::cout << sum << std::endl;

    return 0;
}

解析过程如下:

  1. 首先,包含 <iostream> 头文件,这是用于输入和输出的标准库。

  2. 包含 <string> 头文件,这是用于字符串操作的标准库。

  3. 声明一个函数 addRealNumbers(),用于实现实数相加的逻辑。该函数接受两个字符串类型的参数 num1num2,分别表示两个加数。

  4. addRealNumbers() 函数中,声明一个字符串变量 result,用于存储相加的结果。

  5. 声明一个整数变量 carry,用于记录进位。

  6. 声明两个整数变量 ij,分别初始化为 num1num2 的最后一个字符的索引。

  7. 使用一个 while 循环,循环条件是 i 大于等于0 或 j 大于等于0 或 carry 大于0。

  8. 在循环中,使用条件判断语句判断当前索引是否有效,如果有效,则将对应位置的字符转换为整数,否则将其设置为0。

  9. 计算两个数字和进位的和,并将和除以10得到进位和当前位的数值。

  10. 将当前位的数值转换为字符,并将其拼接到 result 的前面。

  11. 更新索引 ij,分别减1。

  12. 返回 result,即相加的结果。

  13. main() 函数中,声明两个字符串变量 num1num2,用于存储输入的两个加数。

  14. 使用 std::cin 对象,通过输入流操作符 >> 将输入的两个加数赋值给变量 num1num2

  15. 调用 addRealNumbers() 函数,传入 num1num2,并将返回的结果赋值给变量 sum

  16. 使用 std::cout 对象和输出流操作符 <<,输出变量 sum 的值。

  17. 在输出后,使用 std::endl 输出一个换行符,使输出结果换行。

  18. return 0; 表示程序正常结束。

  19. 在运行程序时,按照题目要求输入两个实数加数。

  20. 程序将计算两个实数相加的和,并输出结果。

例如,对于样例输入 0.1111111111111111111111111111110.111111111111111111111111111111,程序将计算它们的和为 0.222222222222222222222222222222,然后输出结果为 0.222222222222222222222222222222

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

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

相关文章

nginx实现路由重定向功能 避免服务器出现 404 Not Found

首先 到服务器上 vue react等项目路由的重定向已解决不了带后缀的访问 这个重定向需要 nginx 来实现 我们先执行 scp -r 用户名 如果没设置过就是root服务器公网地址:/etc/nginx/nginx.conf E:/拷贝地址这里 我将服务器上的nginx配置文件 拷贝到了本地的 E盘下的 拷贝地址目录…

CocosCreator3.8研究笔记(十六)CocosCreator 2D对象

CocosCreator 中&#xff0c;不涉及模型的图片渲染体统称为 2D 渲染对象。 所有的 2D渲染对象需在 RenderRoot 节点下&#xff08;带有 RenderRoot2D 组件的节点&#xff09;才可以被渲染&#xff0c;由于 Canvas 组件本身继承 RenderRoot2D 组件&#xff0c;所以 Canvas 组件一…

分享一个基于微信小程序的汽车租赁小程序 车辆出租小程序 汽车租借小程序源码 lw 调试

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

typescript环境搭建,及tsc命令优化

typescript typescript. 是一种由微软开发的 开源 、跨平台的编程语言。. 它是 JavaScript 的超集&#xff0c;最终会被编译为JavaScript代码。. TypeScript添加了可选的静态类型系统、很多尚未正式发布的ECMAScript新特性&#xff08;如装饰器 [1] &#xff09;。. 2012年10月…

华为HCIA(三)

链路本地地址接口标识64bit 当STP端口到了Forwarding状态后&#xff0c;会转发流量&#xff0c;也处理报文 在TCP/IP模型中&#xff0c;会话层&#xff0c;表示层和应用层&#xff0c;都规划成了应用层 路由表包含目的地址和掩码&#xff0c;优先级&#xff0c;cost,下一跳和…

2023/09/14 qtc++

仿照vector手动实现自己的myVector部分功能&#xff0c;最主要实现二倍扩容功能 #include <iostream>using namespace std; template <typename V> class myVector { private:V *data; //存放数据int size; //数组长度int capacity; //容量大小 public:m…

项目实战— pytorch搭建CNN处理MNIST数据集

项目文件夹介绍 项目文件夹 CNN_MNIST_practice文件夹是整个项目的文件夹&#xff0c;里面存放了六个子文件夹以及四个 .py 程序&#xff0c;接下来我们分别来介绍这些文件的内容。 其中 minist_all_CPU.py 是CPU版本的模型训练&#xff0b;测试程序&#xff0c;而 min…

Mongodb+NodeJS实现服务端架构

一、前言 使用Mogodb和Nodejs完成简单的服务端架构&#xff0c;读完此文章后你会学到&#xff1a;1. 如何安装Mongodb2. Mongodb命令行3. Mongodb的图形化工具Robomongo的使用4. 如何使用NodeJS指挥Mongodb二、安装Mongodb 1、Mongodb简介 官网: https://www.mongodb.com/源于…

2023最实用的订单管理软件有哪些?推荐这5款

订单管理软件是基于互联网技术和数据管理的信息化平台&#xff0c;用于维护和管理订单整个生命周期的系统&#xff0c;包括订单创建、订单修改、订单查询、订单管理、订单发货等一系列流程。 实用的订单管理软件&#xff0c;要具备基础功能的订单管理功能&#xff0c;包含订单…

Python中高效的爬虫框架

大家好&#xff0c;我是涛哥。 在信息时代&#xff0c;数据是无价之宝。许多开发者和数据分析师需要从互联网上采集大量的数据&#xff0c;用于各种用途&#xff0c;如分析、建模、可视化等。Python作为一门强大的编程语言&#xff0c;提供了多种高效的爬虫框架&#xff0c;使…

vue echarts条形统计图每个条上部分加数字

series: [{name: "",type: "bar",barGap: "-100%",//两条线可以重合在一起barWidth: 25,itemStyle: {normal: {label:{//在normal中放lable字段show:true,position: top,color:"#c3cbde",formatter:(params)>{//核心部分 formatter…

LeetCode 热题 100(八):贪心。121. 买卖股票的最佳时机、45. 跳跃游戏 II

题目一&#xff1a; 121. 买卖股票的最佳时机https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ 思路&#xff1a;因为时间复杂度O&#xff08;n&#xff09;&#xff0c;所以使用贪心来做。类似双指针&#xff0c;一个指针记录到当前循环时最小的股票价格&…

企业高效管理多个微信账号的软件

在现代社交媒体的时代&#xff0c;微信已经成为了人们交流、工作的重要工具之一。然而&#xff0c;对于一些企业来说&#xff0c;管理多个微信账号却是一项令人头疼的任务。好在&#xff0c;现在有了一款强大的软件&#xff0c;能够帮助企业高效地管理各个微信账号&#xff0c;…

js基础总结

js基础总结 ajax的post请求中&#xff0c;报错&#xff1a;Content type application/x-www-form-urlencoded;charsetUTF-8 not supported"数组和对象获取值的方式正则去掉特殊字符&#xff1a;【&#xff0c;】&#xff0c;“&#xff0c;”等&#xff0c;可同时处理多个…

投资理财基础知识分享(三)

大家好&#xff0c;我是财富智星&#xff0c;今天跟继续跟大家分享投资理财基础知识&#xff0c;买理财&#xff0c;何时买&#xff0c;何时卖的问题。 一、何时买&#xff1f; 在投资中&#xff0c;决定何时买入资产对于理财新手来说并不是一个应该花费过多精力的问题&#xf…

跟模型和中间层聊聊:什么是最好的AI原生应用?

软件 2.0 注定会发生&#xff1a;所有软件都值得用神经网络重做一遍。 这个 OpenAI 大神 Karpathy 多年前的预言&#xff0c;指向了今天 LLM 应用层的一个关键问题——如何基于 LLM 能力&#xff0c;设计好 AI 原生应用。 我们看到&#xff0c;应用层的创业者们感到悲观、质疑和…

WebDAV之π-Disk派盘 + 网盘精灵

网盘精灵是一款让您的iPhone、iPod和iPad变成WebDAV客户端的软件。它提供了以下功能: 1、WebDAV操作:网盘精灵支持通过WebDAV协议连接到服务器,进行文件的上传、下载和管理操作。您可以使用它连接到WebDAV服务器,方便地进行文件的传输和管理。 2、文件共享:通过网盘精灵…

改造el-dropdown ,实现多选效果,且当选项只剩下一个时,不允许取消

实现效果 实现代码 其中virtual-list是使用的插件,使得下拉数据多的时候,不会出现卡顿 正常不使用虚拟列表的时候可以这样写 <el-dropdown-menu slot"dropdown"><el-dropdown-item v-for"i in item.optionList" :key"i.id" :command&…

面试中常见的算法题和其python实现

在面试中&#xff0c;常见的算法题包括排序算法、查找算法、动态规划、贪心算法等。以下是一些常见算法题及其Python实现示例&#xff1a; 1. 快速排序&#xff08;Quick Sort&#xff09;&#xff1a; 题目描述&#xff1a;给定一个数组&#xff0c;使用快速排序算法对数组进…

亚马逊测评自养号成号率的关键因素及风控策略探讨

什么决定了自养号的成号率&#xff1f;这是测评团队最关心的问题之一 在测评自养号的过程中&#xff0c;除了需要在远程终端建立防火墙来做防关联和指纹浏览器外&#xff0c;干净的国外IP也是至关重要的 IP地址是互联网协议地址的缩写&#xff0c;为每个网络和主机分配一个逻…