当前位置: 首页 > news >正文

GESP认证C++编程真题解析 | 202509 三级

编程题

B4413 数组清零

【题目来源】

洛谷:B4413 [GESP202509 三级] 数组清零 - 洛谷

【题目描述】

小 A 有一个由 \(n\) 个非负整数构成的数组 \(a=[a_1,a_2,…,a_n]\)。他会对阵组 \(a\) 重复进行以下操作,直到数组 \(a\) 只包含 \(0\)。在一次操作中,小 A 会依次完成以下三个步骤:

  1. 在数组 \(a\) 中找到最大的整数,记其下标为 \(k\)。如果有多个最大值,那么选择其中下标最大的。
  2. 从数组 \(a\) 所有不为零的整数中找到最小的整数 \(a_j\)
  3. 将第一步找出的 \(a_k\) 减去 \(a_j\)

例如,数组 \(a=[2,3,4]\) 需要 \(7\) 次操作变成 \([0,0,0]\)

\([2,3,4]→[2,3,2]→[2,1,2]→[2,1,1]→[1,1,1]→[1,1,0]→[1,0,0]→[0,0,0]\)

小 A 想知道,对于给定的数组 \(a\),需要多少次操作才能使得 \(a\) 中的整数全部变成 \(0\)。可以证明,\(a\) 中整数必然可以在有限次操作后全部变成 \(0\)。你能帮他计算出答案吗?

【输入】

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

第二行,\(n\) 个非负整数 \(a_1,a_2,…,a_n\),表示数组 \(a\) 中的整数。

【输出】

一行,一个正整数,表示 \(a\) 中整数全部变成 \(0\) 所需要的操作次数。

【输入样例】

3
2 3 4

【输出样例】

7

【算法标签】

《洛谷 B4413 数组清零》 #模拟# #数组# #GESP# #2025#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 105;  // 定义数组最大长度
int n;               // 数组元素个数
int cnt;             // 操作计数器
int a[N];            // 存储数组元素/*** 检查数组是否全为零* @return 如果全零返回true,否则返回false*/
bool chk()
{for (int i = 1; i <= n; i++){if (a[i] != 0){return false;}}return true;
}int main()
{// 输入数组长度cin >> n;// 输入数组元素for (int i = 1; i <= n; i++){cin >> a[i];}// 主循环:直到数组全为零while (!chk()){int k = 1;          // 存储最大值索引int j = 1;          // 存储非零最小值索引cnt++;              // 操作计数加1int maxn = -1e9;    // 最大值初始化为极小值int minn = 1e9;     // 最小值初始化为极大值// 遍历数组寻找最大值和非零最小值for (int i = 1; i <= n; i++){// 更新最大值及其索引if (a[i] >= maxn){k = i;maxn = a[i];}// 更新非零最小值及其索引if (a[i] < minn && a[i] != 0){j = i;minn = a[i];}}// 执行操作:最大值减去非零最小值a[k] = a[k] - a[j];}// 输出操作次数cout << cnt << endl;return 0;
}

【运行结果】

3
2 3 4
7

B4414 日历制作

【题目来源】

洛谷:B4414 [GESP202509 三级] 日历制作 - 洛谷

【题目描述】

小 A 想制作 \(2025\) 年每个月的日历。他希望你能编写一个程序,按照格式输出给定月份的日历。

具体来说,第一行需要输出 MON TUE WED THU FRI SAT SUN,分别表示星期一到星期日。接下来若干行中依次输出这个月所包含的日期,日期的个位需要和对应星期几的缩写最后一个字母对齐。例如,\(2025\)\(9\)\(1\) 日是星期一,在输出九月的日历时,\(1\) 号的个位 \(1\) 就需要与星期一 MON 的最后一个字母 \(N\) 对齐。九月的日历输出效果如下:

MON TUE WED THU FRI SAT SUN1   2   3   4   5   6   78   9  10  11  12  13  1415  16  17  18  19  20  2122  23  24  25  26  27  2829  30

你能帮助小 A 完成日历的制作吗?

【输入】

一行,一个正整数 \(m\),表示需要按照格式输出 \(2025\)\(m\) 月的日历。

【输出】

输出包含若干行,表示 \(2025\)\(m\) 月的日历。

【输入样例】

9

【输出样例】

MON TUE WED THU FRI SAT SUN1   2   3   4   5   6   78   9  10  11  12  13  1415  16  17  18  19  20  2122  23  24  25  26  27  2829  30

【算法标签】

《洛谷 B4414 日历制作》 #模拟# #数组# #GESP# #2025#

【代码详解】

#include <bits/stdc++.h>
using namespace std;int a[50][10];  // 日历表格数组,最多50行7列
int m;           // 用户输入的月份// 各月份的天数数组(索引1-12对应1-12月)
int month[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int main()
{// 输入月份cin >> m;// 计算该月1日是星期几(假设1月1日是星期三)int cnt = 3;  // 1月1日是星期三(3表示周三)for (int i = 2; i <= m; i++){cnt += month[i-1];  // 累加上个月的天数}cnt = (cnt + 7 - 1) % 7 + 1;  // 计算星期几(1-7对应周一到周日)// 填充日历表格int row = 1, col = cnt;  // 起始位置(第一行,第cnt列)for (int i = 1; i <= month[m]; i++){a[row][col] = i;  // 在对应位置填入日期col++;            // 移动到下一列// 处理换行if (col == 8){row++;  // 换到下一行col = 1;  // 从第一列开始}}// 输出日历表头cout << "MON TUE WED THU FRI SAT SUN" << endl;// 输出日历内容for (int i = 1; i <= row; i++){for (int j = 1; j <= 7; j++){if (a[i][j] == 0){printf("    ");  // 空白位置用4个空格填充}else {printf("%3d ", a[i][j]);  // 输出日期,占3位右对齐}}cout << endl;  // 每行结束后换行}return 0;
}

【运行结果】

9
MON TUE WED THU FRI SAT SUN1   2   3   4   5   6   78   9  10  11  12  13  1415  16  17  18  19  20  2122  23  24  25  26  27  2829  30

编程题

B4411 优美的数字

【题目来源】

洛谷:B4411 [GESP202509 二级] 优美的数字 - 洛谷

【题目描述】

如果一个正整数在十进制下的所有数位都相同,小 A 就会觉得这个正整数很优美。例如,正整数 \(6\) 的数位都是 \(6\),所以 \(6\) 是优美的。正整数 \(99\) 的数位都是 \(9\),所以 \(99\) 是优美的。正整数 \(123\) 的数位不都相同,所以 \(123\) 并不优美。

小 A 想知道不超过 \(n\) 的正整数中有多少优美的数字。你能帮他数一数吗?

【输入】

一行,一个正整数 \(n\)

【输出】

一行,一个正整数,表示不超过 \(n\) 的优美正整数的数量。

【输入样例】

6

【输出样例】

6

【算法标签】

《洛谷 B4411 优美的数字》 #循环结构# #GESP# #2025#

【代码详解】

#include <bits/stdc++.h>
using namespace std;int n;      // 输入的数字上限
int cnt;    // 计数器,统计符合条件的数字个数/*** 检查数字是否所有位都相同* @param x 要检查的数字* @return 如果所有位相同返回true,否则返回false*/
bool check(int x)
{int tmp = x % 10;  // 获取最后一位数字x /= 10;           // 去掉最后一位// 检查剩余位是否都与最后一位相同while (x > 0){if (tmp != x % 10)  // 如果当前位不等于最后一位return false;x /= 10;            // 去掉当前位}return true;  // 所有位都相同
}int main()
{// 输入数字上限ncin >> n;// 处理特殊情况:n小于等于9时直接输出nif (n <= 9){cout << n << endl;return 0;}// 遍历1到n的所有数字for (int i = 1; i <= n; i++){// 检查当前数字是否所有位都相同if (check(i)){cnt++;  // 如果满足条件,计数器加1}}// 输出满足条件的数字个数cout << cnt << endl;return 0;
}

【运行结果】

6
6

B4412 菱形

【题目来源】

洛谷:B4412 [GESP202509 二级] 菱形 - 洛谷

【题目描述】

小 A 想绘制一个菱形。具体来说,需要绘制的菱形是一个 \(n\)\(n\) 列的字符画,\(n\) 是一个大于 \(1\) 的奇数。菱形的四个顶点依次位于第 \(1\) 行、第 \(1\) 列、第 \(n\) 行、第 \(n\) 列的正中间,使用 # 绘制。相邻顶点之间也用 # 连接。其余位置都是 .

例如,一个 \(5\)\(5\) 列的菱形字符画是这样的:

..#..
.#.#.
#...#
.#.#.
..#..

给定 \(n\),请你帮小 A 绘制对应的菱形。

【输入】

一行,一个正整数 \(n\)

【输出】

输出共 \(n\) 行,表示对应的菱形。

【输入样例】

3

【输出样例】

.#.
#.#
.#.

【算法标签】

《洛谷 B4412 菱形》 #循环结构# #GESP# #2025#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 35;  // 定义二维数组的最大尺寸
int n;              // 存储输入的图案尺寸
char a[N][N];       // 二维字符数组,用于存储图案int main()
{// 输入图案的尺寸ncin >> n;// 初始化整个图案为全'.'for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){a[i][j] = '.';}}// 绘制图案上半部分的'#'(从顶部到中间)int t = n / 2 + 1;  // 中间列的位置for (int i = 1; i <= n / 2 + 1; i++){a[i][t] = '#';                  // 在当前行的中间列位置放置'#'a[i][(n / 2 + 1) * 2 - t] = '#'; // 对称位置放置'#'t--;                            // 向两侧扩展}// 绘制图案下半部分的'#'(从中间到底部)t = 1;  // 从第一列开始for (int i = (n / 2 + 1); i <= n; i++){a[i][t] = '#';                  // 在当前行的两侧位置放置'#'a[i][(n / 2 + 1) * 2 - t] = '#'; // 对称位置放置'#'t++;                            // 向中间收缩}// 输出最终图案for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){cout << a[i][j];}cout << endl;  // 每行输出后换行}return 0;
}

【运行结果】

3
.#.
#.#
.#.
http://www.jsqmd.com/news/384623/

相关文章:

  • 写论文省心了 8个AI论文软件测评:研究生毕业论文+开题报告高效工具推荐
  • C++11 之 【线程库】(Thread、mutex)
  • 2026年比较好的自动拆包机/无尘吨袋拆包机靠谱厂家盘点 - 行业平台推荐
  • 【RT-DETR涨点改进】全网独家首发、特征融合改进篇 | TCSVT 2025 | 引入MSAF多尺度注意力融合模块,精细设计的特征分支、上下文增强、注意力引导和多尺度融合模块,小目标检测涨点改进
  • Linux 之 【多线程】(STL、智能指针与线程安全、读者写者问题)
  • 照着用就行:专科生专属降AI工具 —— 千笔·降AI率助手
  • 2025年度口碑!全球用户点赞的碳酸镁直销厂家推荐,做得好的碳酸镁源头厂家口碑排行博仕佶镁专注产品质量 - 品牌推荐师
  • 【Python】常用的语法糖
  • C++11 之 【线程库】(condition_variable、atomic、线程交替打印奇偶数、谓词、线程总结)
  • 2026年靠谱的谈判离婚律师/光谷离婚律师专业推荐事务所 - 行业平台推荐
  • 2026年质量好的外置式余热锅炉/内置式烧结余热锅炉行业内口碑厂家推荐 - 行业平台推荐
  • OpenClaw在Win 环境下成功部署集成飞书
  • 2026年口碑好的苏州空气过滤器/漆雾过滤器用户口碑认可厂家 - 行业平台推荐
  • 2026年质量好的发电机/潍柴发电机厂家实力揭秘 - 行业平台推荐
  • Linux 应用层研发入门(十三)| 字符的编码方式
  • 2026年质量好的柴油发电机/奔驰柴油发电机厂家怎么挑 - 行业平台推荐
  • 2026年口碑好的威海劳动仲裁律师/威海房产律师品牌推荐事务所 - 行业平台推荐
  • 2026年评价高的福建玄金瓦/金虹科玄金瓦哪家好销售厂家推荐 - 行业平台推荐
  • 不踩雷!千笔AI,遥遥领先的降AI率软件
  • 一篇搞定全流程AI论文网站 千笔写作工具 VS 灵感风暴AI,专科生首选
  • 基于卷积神经网络-双向长短时记忆网络结合SE注意力机制的数据回归预测(CNN-BiLSTM-SE)
  • 2026别错过!AI论文写作软件 千笔·专业论文写作工具 VS PaperRed,专为本科生打造!
  • 2026年靠谱的广州肉类冷库设备/高温保鲜冷库设备工厂直供推荐哪家专业 - 行业平台推荐
  • 2026年知名的彩石瓦厂家/福建彩石瓦直销厂家采购指南如何选 - 行业平台推荐
  • 2026年靠谱的天车龙门五轴加工中心/摆头五轴加工中心哪家靠谱制造厂家推荐 - 行业平台推荐
  • 2026年热门的植提设备分离设备/植提设备干燥设备源头厂家采购指南怎么选(畅销) - 行业平台推荐
  • 一文讲透|AI论文平台 千笔·专业论文写作工具 VS speedai,本科生专属神器!
  • 2026年比较好的智能控温冷库变频机组/广州冷库变频机组热门品牌推荐口碑排行 - 行业平台推荐
  • 2026年知名的激光焊接机/手持式激光焊接机高口碑品牌参考选哪家 - 行业平台推荐