涉及考试:计算机学会编程能力等级认证(GESP)、电子学会等级考试 活动内容:提供不同等级的真题供小朋友们选择练习 备考建议:根据自己备考的等级选择相应题目 附加价值:可作为白名单比赛的备考训练 本月打卡:八月GESP_Python打卡题目 “Python一级”备考指南 “Python二级”备考指南 “Python三级”备考指南 “Python四级”备考指南
【提交】
https://www.luogu.com.cn/problem/B3839
【问题描述】
1、 累计相加,形如:
2、利用 input()语句输入一个大于 1 的正整数;
3、观察后一项与前一项的关系;
【输入描述】
1、输入一个大于 1 的正整数,假设输入合规,不考虑不合规情景,如带小数点的数, 负数等;
2、特别提示:常规程序中,输入时好习惯是有提示。考试时由于系统限定,输入时所 有 input()函数不可有提示信息。
【输出描述】
输出累计相加的结果。
【样例输入1】
3【样例输出1】
10【样例输入2】
4【样例输出2】
20【样例输入3】
10【样例输出3】
220参考程序:
'''[GESP202306 一级] 累计相加https://www.luogu.com.cn/problem/B3839'''N = int(input())allTnt = 0# 保存全部序列之和subTnt = 0# 保存子序列之和for i in range(1, N+1): subTnt += i allTnt += subTntprint(allTnt)【提交】
https://www.luogu.com.cn/problem/B3955
【问题描述】
小杨想要构造一个 的日字矩阵( 为奇数),具体来说,这个矩阵共有 行,每行 个字符,其中最左列、最右列都是 |,而第一行、最后一行、以及中间一行(即第 行)的第 个字符都是 -,其余所有字符都是半角小写字母 x。例如,一个 的日字矩阵如下:
|---||xxx||---||xxx||---|请你帮小杨根据给定的 打印出对应的“日字矩阵”。
【输入描述】
一行一个整数 (,保证 为奇数)。
【输出描述】
输出对应的“日字矩阵”。
请严格按格式要求输出,不要擅自添加任何空格、标点、空行等任何符号。你应该恰好输出 行,每行除了换行符外恰好包含 个字符,这些字符要么是 -,要么是 |,要么是 x。你的输出必须和标准答案完全一致才能得分,请在提交前仔细检查。
【特别提醒】
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
【样例输入1】
5【样例输出1】
|---||xxx||---||xxx||---|【样例输入2】
7【样例输出2】
|-----||xxxxx||xxxxx||-----||xxxxx||xxxxx||-----|参考程序:
'''[GESP202403 二级] 小杨的日字矩阵https://www.luogu.com.cn/problem/B3955'''n = int(input())for i in range(n): buf = ""for j in range(n):if j == 0or j == n - 1: ch = "|"elif i == 0or i == n - 1or i == n // 2: ch = "-"else: ch = "x" buf = buf + ch print(buf)【提交】
https://www.luogu.com.cn/problem/B4004
【问题描述】
小杨有一个包含 个正整数的序列 ,他想知道是否存在 使得 是序列 中所有数的倍数。
【输入描述】
第一行包含一个正整数 ,代表测试用例组数。
接下来是 组测试用例。
对于每组测试用例,一共两行。其中,第一行包含一个正整数 ;第二行包含 个正整数,代表序列 。
【输出描述】
对于每组测试用例,如果存在 满足对于所有 是 的倍数,输出 Yes,否则输出 No。
【样例输入1】
231 2 451 2 3 4 5【样例输出1】
YesNo【样例解释】
对于第一组数据,对于 ,满足 是 和 的倍数。
【数据范围】
对于全部数据,保证有 ,,。
参考程序:
'''GESP:2024.06三级 寻找倍数https://www.luogu.com.cn/problem/B4004'''t = int(input())for _ in range(t): n = int(input()) lst = list(map(int, input().split())) max_ = max(lst)if sum([max_ % i for i in lst]) == 0: print("Yes")else: print("No")【提交】
https://www.luogu.com.cn/problem/B4557
【问题描述】
小杨同学正在游玩经典游戏「扫雷」,他想自己生成一个「扫雷」的地图。
小杨同学希望生成的地图大小为 行 列,一共 个区块。
区块行号为 ,列号为 。 其中一些区块为雷区,其它区块不为雷区。
小杨同学指定了 个区块为雷区,而其它区块均不为雷区。小杨同学希望你帮忙计算非雷区的区块,每个区块与多少个雷区相邻?
我们定义区块相邻,当且仅当两个区块至少有一个公共顶点(也就是说对于不在地图边缘的区块,周围 个区块均与其相邻)。
【输入描述】
输入包含 行。第一行,三个正整数 , 和 ,分别表示地图行数和列数,以及雷区数量。接下来的 行,每行有 个整数,分别表示第 个雷区的行号和列号。
保证输入的雷区不重复。
【输出描述】
输出 行,每行 个 字符(使用空格分割),对于第 行第 列,输出地图对应区块的信息:
*;【样例输入1】
3 4 41 11 32 43 2【样例输出1】
* 2 * 22 3 3 *1 * 2 1【样例解释1】
根据输入,在 的地图上有 个雷区,分别是 ,, 和 ,如输出样例中 * 所示,其它非雷区区块的相邻雷区数量可以直观看出。
【数据范围】
。
输入的雷区必定在地图内且不重复,注意行号和列号均从 开始。
参考程序:
'''[GESP202606 四级] 扫雷https://www.luogu.com.cn/problem/B4557'''n, m, q = map(int, input().split())# 初始化:雷标记矩阵 + 计数矩阵(多一圈避免边界判断)lst = [[0for _ in range(m + 2)] for _ in range(n + 2)]for _ in range(q): i, j = map(int, input().split()) lst[i][j] = '*'dx = [-1, -1, -1, +0, +0, +1, +1, +1]dy = [-1, +0, +1, -1, +1, -1, +0, +1]for i in range(1, n + 1):for j in range(1, m + 1):if lst[i][j] != "*": cnt = 0for k in range(8): x = i + dx[k] y = j + dy[k]if lst[x][y] == "*": cnt += 1 lst[i][j] = cntfor i in range(1, n + 1):for j in range(1, m + 1): print(lst[i][j], end=" ") print()青少年编程竞赛交流
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。
