1

GESP认证C++编程真题解析 | 202403 二级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:GESP认证C++编程真题解析 | 汇总


编程题

B3954 乘法问题

【题目来源】

洛谷:B3954 [GESP202403 二级] 乘法问题 - 洛谷

【题目描述】

小A最近刚刚学习了乘法,为了帮助他练习,我们给他若干个正整数,并要求他将这些数乘起来。

对于大部分题目,小A可以精准地算出答案,不过,如果这些数的乘积超过 \(10^6\),小A就不会做了。

请你写一个程序,告诉我们小A会如何作答。

【输入】

第一行一个整数 \(n\),表示正整数的个数。

接下来 \(n\) 行,每行一个整数 \(a\)。小A需要将所有的 \(a\) 乘起来。

【输出】

输出一行,如果乘积超过 \(10^6\),则输出>1000000;否则输出所有数的乘积。

【输入样例】

2
3
5

【输出样例】

15

【算法标签】

《洛谷 B3954 乘法问题》 #循环结构# #GESP# #2024#

【代码详解】

#include <bits/stdc++.h>  // 包含标准库头文件
using namespace std;      // 使用标准命名空间

int n;  // 定义全局变量n,用于存储输入的数字个数(注意有两个分号)

int main()  // 主函数
{
    cin >> n;  // 从标准输入读取数字个数n
    int mul = 1;  // 初始化乘积变量mul为1
    
    // 循环读取n个数字并计算它们的乘积
    for (int i=1; i<=n; i++)
    {
        int x; cin >> x;  // 读取当前数字x
        mul *= x;  // 将x乘入总乘积mul
        
        // 检查乘积是否超过1000000
        if (mul>1000000)
        {
            cout << ">1000000" << endl;  // 如果超过,输出提示信息
            return 0;  // 并立即结束程序
        }
    }
    
    cout << mul << endl;  // 输出最终的乘积值
    return 0;  // 程序正常结束
}

【运行结果】

2
3
5
15

B3955 小杨的日字矩阵

【题目来源】

洛谷:B3955 [GESP202403 二级] 小杨的日字矩阵 - 洛谷

【题目描述】

小杨想要构造一个 \(N\times N\) 的日字矩阵(\(N\) 为奇数),具体来说, 这个矩阵共有 \(N\) 行, 每行 \(N\) 个字符, 其中最左列、最右列都是|, 而第一行、最后一行、以及中间一行(即第 \(\frac{N+1}{2}\) 行)的第个字符都是 \(2\sim N-1\),其余所有字符都是半角小写字母x。例如,一个 \(N=5\) 的日字矩阵如下:

|---|
|xxx|
|---|
|xxx|
|---|

请你帮小杨根据给定的 \(N\) 打印出对应的“日字矩阵"。

【输入】

一行一个整数 \(N\)\(5≤N≤49\),保证 \(N\) 为奇数)。

【输出】

输出对应的“日字矩阵"。

请严格按格式要求输出,不要擅自添加任何空格、标点、空行等任何符号。你应该恰好输出 \(N\) 行,每行除了换行符外恰好包含 \(N\) 个字符,这些字符要么是-,要么是|,要么是x。你的输出必须和标准答案完全一致才能得分,请在提交前仔细检查。

【输入样例】

5

【输出样例】

|---|
|xxx|
|---|
|xxx|
|---|

【算法标签】

《洛谷 B3955 小杨的日字矩阵》 #循环结构# #GESP# #2024#

【代码详解】

#include <bits/stdc++.h>  // 包含所有标准库头文件
using namespace std;      // 使用标准命名空间

const int N = 55;  // 定义最大矩阵尺寸
int n;             // 存储矩阵的实际尺寸
char a[N][N];      // 定义字符矩阵

int main() {
    cin >> n;  // 输入矩阵尺寸n
    
    // 填充矩阵
    for (int i = 1; i <= n; i++) {       // 遍历行
        for (int j = 1; j <= n; j++) {   // 遍历列
            if (j == 1 || j == n) {      // 如果是第一列或最后一列
                a[i][j] = '|';           // 填充竖线
            }
            else if (i == 1 || i == n || i == (n+1)/2) {  // 如果是第一行、最后一行或中间行
                a[i][j] = '-';           // 填充横线
            }
            else {                       // 其他位置
                a[i][j] = 'x';           // 填充x
            }
        }
    }
    
    // 输出矩阵
    for (int i = 1; i <= n; i++) {       // 遍历行
        for (int j = 1; j <= n; j++) {   // 遍历列
            cout << a[i][j];              // 输出当前字符
        }
        cout << endl;                     // 换行
    }
    
    return 0;  // 程序正常结束
}

【运行结果】

5
|---|
|xxx|
|---|
|xxx|
|---|
posted @ 2026-01-19 16:46  热爱编程的通信人  阅读(1)  评论(0)    收藏  举报