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

在这里插入图片描述

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

第1题:输出第二个整数

输入三个整数,把第二个输入的整数输出。
时间限制:1000
内存限制:65536
输入
只有一行,共三个整数,整数之间由一个空格分隔。整数是32位有符号整数。
输出
只有一行,一个整数,即输入的第二个整数。
样例输入
123 456 789
样例输出
456

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

#include <iostream>

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

    std::cout << num2 << std::endl;

    return 0;
}

解析过程如下:

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

  2. main() 函数中,声明三个整数变量 num1num2num3,用于存储输入的三个整数。

  3. 使用 std::cin 对象,通过输入流操作符 >> 依次将输入的三个整数赋值给变量 num1num2num3

  4. 使用 std::cout 对象,通过输出流操作符 << 输出变量 num2 的值。

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

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

    扫描二维码关注公众号,回复: 16719174 查看本文章
  7. 在运行程序时,输入三个整数,以空格分隔。

  8. 程序将输出第二个输入的整数,即 num2 的值。

例如,对于样例输入 123 456 789,程序将输出 456

第2题:计算表达式的值

给定整数x,y的值,计算3x+2y的值。
时间限制:3000
内存限制:65536
输入
一行包含2个整数x,y,以空格作为分隔。数据保证最后计算结果还在整数表示范围内。
输出
按照题目要求输出结果
样例输入
2 3
样例输出
12

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

#include <iostream>

int main() {
    
    
    int x, y;
    std::cin >> x >> y;

    int result = 3 * x + 2 * y;
    std::cout << result << std::endl;

    return 0;
}

解析过程如下:

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

  2. main() 函数中,声明两个整数变量 xy,用于存储输入的两个整数。

  3. 使用 std::cin 对象,通过输入流操作符 >> 依次将输入的两个整数赋值给变量 xy

  4. 计算表达式的值,使用 3 * x + 2 * y,将结果赋值给变量 result

  5. 使用 std::cout 对象,通过输出流操作符 << 输出变量 result 的值。

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

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

  8. 在运行程序时,输入两个整数,以空格分隔。

  9. 程序将计算表达式 3x + 2y 的值,并输出结果。

例如,对于样例输入 2 3,程序将计算表达式 3 * 2 + 2 * 3,输出结果为 12

第3题:大写字母的判断

输入一个字符,判断是否是英文大写字母,即是否是A-Z中的一个。
时间限制:1000
内存限制:65536
输入
一个字符。
输出
如果是英文大写字母,则输出YES,否者输出NO。
样例输入
K
样例输出
YES

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

#include <iostream>
#include <cctype>

int main() {
    
    
    char ch;
    std::cin >> ch;

    if (std::isupper(ch)) {
    
    
        std::cout << "YES" << std::endl;
    } else {
    
    
        std::cout << "NO" << std::endl;
    }

    return 0;
}

解析过程如下:

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

  2. 包含 <cctype> 头文件,这是为了使用 std::isupper 函数,判断字符是否是大写字母。

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

  4. 使用 std::cin 对象,通过输入流操作符 >> 将输入的字符赋值给变量 ch

  5. 使用 std::isupper 函数判断变量 ch 是否是大写字母。如果是大写字母,返回值为真;否则,返回值为假。

  6. 根据判断结果,使用条件语句 if 输出相应的结果。如果是大写字母,输出 “YES”;否则,输出 “NO”。

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

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

  9. 在运行程序时,输入一个字符。

  10. 程序将判断输入的字符是否是大写字母,并输出相应的结果。

例如,对于样例输入 K,程序将判断字符 K 是否是大写字母,由于是大写字母,输出 “YES”。

第4题:满足条件的数的累加

现有n个整数,将其中个位数为k的数进行累加求和。
时间限制:1000
内存限制:65536
输入
第一行两个整数n、k,以空格分隔。( 0 < n < 1000, 0 ≤ k ≤ 9) 第二行n个非负整数,以空格分隔,每个数不大于100000。
输出
输出满足题目要求的累加和。
样例输入
10 7
2 5 7 17 11 18 4 27 1 7
样例输出
58

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

#include <iostream>

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

    int sum = 0;
    for (int i = 0; i < n; i++) {
    
    
        int num;
        std::cin >> num;

        if (num % 10 == k) {
    
    
            sum += num;
        }
    }

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

    return 0;
}

解析过程如下:

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

  2. main() 函数中,声明两个整数变量 nk,分别用于存储输入的整数个数和个位数的值。

  3. 使用 std::cin 对象,通过输入流操作符 >> 依次将输入的两个整数赋值给变量 nk

  4. 声明一个整数变量 sum,用于存储满足条件的数的累加和,初始值为0。

  5. 使用 for 循环遍历输入的整数。

  6. 在循环中,声明一个整数变量 num,用于存储当前输入的整数。

  7. 使用 std::cin 对象,通过输入流操作符 >> 将当前输入的整数赋值给变量 num

  8. 使用条件语句 if 判断 num 的个位数是否等于 k。如果等于,将 num 加到 sum 中。

  9. 循环结束后,输出变量 sum 的值,使用 std::cout 对象和输出流操作符 <<

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

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

  12. 在运行程序时,按照题目要求输入整数n、k和n个非负整数。

  13. 程序将计算个位数为k的数的累加和,并输出结果。

例如,对于样例输入 10 72 5 7 17 11 18 4 27 1 7,程序将计算个位数为7的数的累加和,即 7 + 17 + 27 + 7 = 58,输出结果为 58

第5题:金币

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币(N为任意正整数)。
你需要编写一个程序,确定从第一天开始的给定天数内,骑士一共获得了多少金币。
时间限制:10000
内存限制:65536
输入
一个整数(范围1到10000),表示天数。
输出
骑士获得的金币数。
样例输入
6
样例输出
14

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

#include <iostream>

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

    int coins = 0;
    int current_coins = 1;
    int count = 0;

    for (int i = 1; i <= days; i++) {
    
    
        coins += current_coins;
        count++;

        if (count == current_coins) {
    
    
            current_coins++;
            count = 0;
        }
    }

    std::cout << coins << std::endl;

    return 0;
}

解析过程如下:

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

  2. main() 函数中,声明一个整数变量 days,用于存储输入的天数。

  3. 使用 std::cin 对象,通过输入流操作符 >> 将输入的天数赋值给变量 days

  4. 声明一个整数变量 coins,用于存储骑士获得的金币数,初始值为0。

  5. 声明一个整数变量 current_coins,用于表示当前连续获得的金币数量,初始值为1。

  6. 声明一个整数变量 count,用于计数当前连续获得金币的天数,初始值为0。

  7. 使用 for 循环遍历每一天,循环变量 i 从1到输入的天数。

  8. 在循环中,将当前连续获得的金币数量 current_coins 累加到变量 coins 中。

  9. 将当前连续获得金币的天数计数 count 增加1。

  10. 使用条件语句 if 判断当前连续获得金币的天数计数是否等于当前连续获得的金币数量。如果相等,表示需要进入下一个连续获得金币的阶段,将 current_coins 增加1,同时将 count 重置为0。

  11. 循环结束后,输出变量 coins 的值,使用 std::cout 对象和输出流操作符 <<

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

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

  14. 在运行程序时,按照题目要求输入天数。

  15. 程序将计算骑士在给定天数内获得的金币数,并输出结果。

例如,对于样例输入 6,程序将按照题目要求计算骑士从第一天开始的6天内获得的金币数。根据题目给定的工资发放模式,骑士获得的金币数为 1 + 2 + 2 + 3 + 3 + 3 = 14,输出结果为 14

猜你喜欢

转载自blog.csdn.net/gozhuyinglong/article/details/132868704