涉及考试:计算机学会编程能力等级认证(GESP) 活动内容:提供不同等级的真题供小朋友们选择练习 备考建议:根据自己备考的等级选择相应题目 附加价值:可作为白名单比赛的备考训练 本月打卡:本月打卡题目
【提交】
https://www.luogu.com.cn/problem/B4410
【问题描述】
金字塔由 层石块垒成。从塔底向上,每层依次需要 ,, ,, 块石块。请问搭建金字塔总共需要多少块石块?
【输入描述】
一行,一个正整数 ,表示金字塔的层数。
【输出描述】
一行,一个正整数,表示搭建金字塔所需的石块数量。
【样例输入1】
2【样例输出1】
5【样例输入2】
5【样例输出2】
55【提示】
对于所有测试点,保证 。
参考答案:
/** [GESP202509 一级] 金字塔* https://www.luogu.com.cn/problem/B4410*/#include<iostream>using namespace std;intmain(){int n, ans = 0;cin >> n;for (int i = 1; i <= n; i++) { ans += i * i; }cout << ans << endl;return 0;}【提交】
https://www.luogu.com.cn/problem/B4412
【问题描述】
小 A 想绘制一个菱形。具体来说,需要绘制的菱形是一个 行 列的字符画, 是一个大于 的奇数。菱形的四个顶点依次位于第 行、第 列、第 行、第 列的正中间,使用 # 绘制。相邻顶点之间也用 # 连接。其余位置都是 .。例如,一个 行 列的菱形字符画是这样的:
..#...#.#.#...#.#.#...#..给定 ,请你帮小 A 绘制对应的菱形。
【输入描述】
一行,一个正整数 。
【输出描述】
输出共 行,表示对应的菱形。
【样例输入1】
3【样例输出1】
.#.#.#.#.【样例输入2】
9【样例输出2】
....#.......#.#.....#...#...#.....#.#.......#.#.....#...#...#.....#.#.......#....【数据范围】
对于所有测试点,保证 并且 为奇数。
参考答案:
#include<iostream>#include<cmath> // 用于abs函数using namespace std;intmain(){int n;cin >> n;// 计算中心点坐标(行列从0开始计数)int center = n / 2;// 遍历每一行for (int i = 0; i < n; i++) {// 遍历每一列for (int j = 0; j < n; j++) {// 计算当前点到中心点的曼哈顿距离int distance = abs(i - center) + abs(j - center);// 如果曼哈顿距离等于中心点到顶点的距离,则输出'#',否则输出'.'if (distance == center) {cout << "#"; } else {cout << "."; } }cout << endl; // 换行 }return 0;}【提交】
https://www.luogu.com.cn/problem/B3926
【问题描述】
小杨这周的数学作业是做单位转换,喜欢编程的小杨决定编程帮他解决这些问题。
小杨只学了长度单位和重量单位,具体来说:
小杨的作业只涉及将更大的单位转换为更小的单位,也就是说,小杨的作业只会包含如下题型:米转换为毫米,千米转换为毫米,千米转换为米,克转换为毫克,千克转换为毫克,千克转换为克。
现在,请你帮忙完成单位转换的程序。
【输入描述】
输入的第一行为一个整数,表示题目数量。
接下来行,每行一个字符串,表示转换单位的题目,格式为 x 单位1 = ? 单位2 。其中,x 为一个不超过1000的非负整数, 单位1 和 单位2 分别为两个单位的英文缩写,保证它们都是长度单位或都是重量单位,且 单位1 比 单位2 更大。
例如,如果题目需要你将 1km 转换为 mm,则输入为 1 km = ? mm 。
保证 。
【输出描述】
输出行,依次输出所有题目的答案,输出时,只需要将输入中的 代入答案,其余部分一字不差地输出即可。
由于小杨的题目只涉及将更大的单位转换为更小的单位,并且输入的 x 是整数,因此答案一定也是整数。
例如,如果题目需要你将 1km 转换为 mm,输入为 1 km = ? mm,则你需要输出 1 km = 1000000 mm 。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。输入格式将严格按照题目要求,且你的输出必须和标准答案完全一致才能得分,请在提交前仔细检查。
【样例输入1】
21 km = ? mm1 m = ? mm【样例输出1】
1 km = 1000000 mm1 m = 1000 mm【样例输入2】
5100 m = ? mm1000 km = ? m20 kg = ? g200 g = ? mg0 kg = ? mg【样例输出2】
100 m = 100000 mm1000 km = 1000000 m20 kg = 20000 g200 g = 200000 mg0 kg = 0 mg参考答案:
/** [GESP202312 三级] 单位转换* https://www.luogu.com.cn/problem/B3926*/#include<iostream>#include<string>using namespace std;intmain(){int n;cin >> n;for (int i = 0; i < n; i++) {int x,k=1;string s1, s2, s3, s4;cin >> x >> s1 >> s2 >> s3 >> s4;if (s4.size() == 1) { k = 1000; }else { k = s1.size() == 1 ? 1000 : 1000000; }cout << x << ' ' << s1 << ' ' << s2 << ' ';cout << x * k << ' ' << s4; }return 0;}【提交】
https://www.luogu.com.cn/problem/B4360
【问题描述】
小 A 在高为 宽为 的矩形画布上绘制了一幅画。由于画布边缘留白太多,小 A 想适当地裁剪画布,只保留画的主体。具体来说,画布可以视为 行 列的字符矩阵,其中的字符均为 ASCII 码位于 之间的可见字符,小 A 只保留画布中由第 行到第 行、第 列到第 列构成的子矩阵。
小 A 将画布交给了你,你能帮他完成画布的裁剪吗?
【输入描述】
第一行,两个正整数 ,分别表示画布的行数与列数。
第二行,四个正整数 ,表示保留的行列边界。
接下来 行,每行一个长度为 的字符串,表示画布内容。
【输出描述】
输出共 行,每行一个长度为 的字符串,表示裁剪后的画布。
【样例输入1】
3 52 2 2 4......>_<......【样例输出1】
>_<【样例输入2】
5 51 2 3 4AbCdEfGhIkLmNoPqRsTuVwXyZ【样例输出2】
CdhI【数据范围】
对于所有测试点,保证 ,,。
参考答案:
/** [GESP202506 四级] 画布裁剪* https://www.luogu.com.cn/problem/B4360*/#include<iostream>using namespace std;char arr[105][105];intmain(){int h, w;cin >> h >> w;int x1, x2, y1, y2;cin >> x1 >> x2 >> y1 >> y2;for (int i = 1;i <= h;i++) {for (int j = 1;j <= w;j++) {cin >> arr[i][j]; } }for (int x = x1;x <= x2;x++) {for (int y = y1;y <= y2;y++) {cout << arr[x][y]; }cout << endl; }return 0;}【提交】
https://www.luogu.com.cn/problem/B3929
【问题描述】
小杨认为,所有大于等于 的完全平方数都是他的超级幸运数。
小杨还认为,所有超级幸运数的倍数都是他的幸运数。自然地,小杨的所有超级幸运数也都是幸运数。
对于一个非幸运数,小杨规定,可以将它一直 ,直到它变成一个幸运数。我们把这个过程叫做幸运化。例如,如果,那么 是最小的幸运数,而 不是,但我们可以连续对 做 次 操作,使其变为 ,所以我们可以说, 幸运化后的结果是 。
现在,小杨给出 个数,请你首先判断它们是不是幸运数;接着,对于非幸运数,请你将它们幸运化。
【输入描述】
第一行 个正整数 。
接下来 行,每行一个正整数 ,表示需要判断(幸运化)的数。
【输出描述】
输出 行,对于每个给定的 ,如果它是幸运数,请输出 lucky,否则请输出将其幸运化后的结果。
【样例输入1】
2 4 1 4 5 9【样例输出1】
4 lucky 8 lucky【样例解释1】
虽然是完全平方数,但它小于 ,因此它并不是超级幸运数,也不是幸运数。将其进行 次 操作后,最终得到幸运数 。是幸运数,因此直接输出 lucky 。
不是幸运数,将其进行 次 操作后,最终得到幸运数 。
是幸运数,因此直接输出 lucky 。
【样例输入2】
16 11 1 2 4 8 16 32 64 128 256 5121024【样例输出2】
16 16 16 16 lucky lucky lucky lucky lucky lucky lucky【数据规模】
参考答案:
/** [GESP202312 五级] 小杨的幸运数* https://www.luogu.com.cn/problem/B3929*/# include<iostream># include<cmath>using namespace std;const int N = 1000005;int arr[N];intmain(){// 利用桶标记的思维来做int a, n;cin >> a >> n;int b = ceil(sqrt(a));for (int i = b;i * i < N;i++) {for (int j = i * i;j < N;j += i * i) arr[j] = j; }for (int i = 0;i < n;i++) {int x;cin >> x;if (arr[x] == x) {cout << "lucky" << endl; }else {int j = x;while (arr[j] == 0) { j++; }cout << j << endl; } }return 0;}【提交】
http://noi.openjudge.cn/ch0206/1759/
【描述】
一个数的序列 ,当 的时候,我们称这个序列是上升的。对于给定的一个序列 ,我们可以得到一些上升的子序列 ,这里 。比如,对于序列,有它的一些上升子序列,如, 等等。这些子序列中最长的长度是4,比如子序列。
你的任务,就是对于给定的序列,求出最长上升子序列的长度。
【输入】
输入的第一行是序列的长度。第二行给出序列中的个整数,这些整数的取值范围都在到。
【输出】
最长上升子序列的长度。
【样例输入】
71 7 3 5 9 4 8【样例输出】
4【参考程序】
/** 1759:最长上升子序列* http://noi.openjudge.cn/ch0206/1759/*/#include<iostream>#include<vector>#include<algorithm>using namespace std;intmain(){int N;cin >> N;vector<int> a(N);for (int i = 0; i < N; i++) {cin >> a[i]; }vector<int> dp(N, 1);for (int i = 0; i < N; i++) {for (int j = 0; j < i; j++) {if (a[j] < a[i]) { dp[i] = max(dp[i], dp[j] + 1); } } }int maxLen = 0;for (int len : dp) { maxLen = max(maxLen, len); }cout << maxLen << endl;return 0;}青少年编程竞赛交流
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。
