涉及考试:计算机学会编程能力等级认证(GESP)、电子学会等级考试 活动内容:提供不同等级的真题供小朋友们选择练习 备考建议:根据自己备考的等级选择相应题目 附加价值:可作为白名单比赛的备考训练 本月打卡:本月GESP_Python打卡题目
【提交】
https://www.luogu.com.cn/problem/B4001
【问题描述】
小杨有一个正整数 ,他想知道 是否是一个立方数。
一个正整数 是立方数当且仅当存在一个正整数 满足 。
【输入描述】
第一行包含一个正整数 。
【输出描述】
如果正整数 是一个立方数,输出 Yes,否则输出 No。
【样例输入1】
8【样例输出1】
Yes【样例输入2】
9【样例输出2】
No【样例解释】
对于样例1,存在正整数 使得 ,因此 为立方数。
对于样例2,不存在满足条件的正整数,因此 不为立方数。
【数据范围】
对于全部数据,保证有 。
参考程序:
'''GESP2024.06 立方数https://www.luogu.com.cn/problem/B4001'''n = int(input())i, flag = 1, Falsewhile i ** 3 <= n:if i ** 3 == n: flag = Truebreak i += 1if flag: print("Yes")else: print("No")【提交】
https://www.luogu.com.cn/problem/B4260
【问题描述】
假设现在是 年 月 日 时而 小时后是 年 月 日 时,对于给定的 ,小杨想请你帮他计算出对应的 是多少。
【输入描述】
输入包含五行,每行一个正整数,分别代表 。
【输出描述】
输出四个正整数,代表 。
【样例输入1】
2008228231【样例输出1】
2008 2 29 0【数据范围】
对于全部数据,保证有 ,,,,。数据保证为合法时间。
【提示】
闰年判断规则
满足以上任意一条规则的年份就是闰年,否则是平年。
参考程序:
'''[GESP202503 二级] 时间跨越https://www.luogu.com.cn/problem/B4260'''y = int(input())m = int(input())d = int(input())h = int(input())k = int(input())h = k + hif h >= 24: h = h - 24 d = d + 1if m == 1or m == 3or m == 5or m == 7or m == 8or m == 10or m == 12:if d > 31: d = d - 31 m = m + 1elif m == 4or m == 6or m == 9or m == 11:if d > 30: d = d - 30 m = m + 1elif m == 2:if (y % 4 == 0and y % 100 != 0) or (y % 400 == 0):if d > 29: d = d - 29 m = m + 1else:if d > 28: d = d - 28 m = m + 1if m > 12: m = m - 12 y = y + 1print(y, m, d, h)【提交】
https://www.luogu.com.cn/problem/B3957
【问题描述】
小杨同学有一个包含 个非负整数的序列 ,他想要知道其中有多少对下标组合 ,使得 是完全平方数。
如果 是完全平方数,则存在非负整数 使得 。
【输入描述】
第一行一个非负整数 ,表示非负整数个数。
第二行包含 个非负整数 ,表示序列 包含的非负整数。
【输出描述】
输出一个非负整数,表示和是完全平方数的非负整数对数。
【样例输入1】
51 4 3 3 5【样例输出1】
3【样例输入2】
23 5【样例输出2】
0对于全部数据,保证有 。
参考程序:
'''[GESP202403 三级] 完全平方数https://www.luogu.com.cn/problem/B3957'''n = int(input())A = list(map(int, input().split()))ans = 0for i in range(n):for j in range(i + 1, n): num = A[i] + A[j] tmp = int(num ** 0.5 + 1e-6)if tmp * tmp == num: ans += 1print(ans)【提交】
https://www.luogu.com.cn/problem/B4263
【问题描述】
小杨有一大片荒地,可以表示为一个 行 列的网格图。
小杨想要开垦这块荒地,但荒地中一些位置存在杂物,对于一块不存在杂物的荒地,该荒地可以开垦当且仅当其上下左右四个方向相邻的格子均不存在杂物。
小杨可以选择至多一个位置,清除该位置的杂物,移除杂物后该位置变为荒地。小杨想知道在清除至多一个位置的杂物的情况下,最多能够开垦多少块荒地。
【输入描述】
第一行包含两个正整数 ,含义如题面所示。
之后 行,每行包含一个长度为 且仅包含字符 . 和 # 的字符串。如果为 .,代表该位置为荒地,如果为 #,代表该位置为杂物。
【输出描述】
输出一个整数,代表在清除至多一个位置的杂物的情况下,最多能够开垦的荒地块数。
【样例输入1】
3 5......#..#.....【样例输出1】
11【样例解释】
移除第二行从左数第二块空地的杂物后:
.........#.....第一行从左数前 块荒地,第二行从左数前 块荒地,第三行从左数前 块荒地,均可开垦,。
【数据范围】
对于全部数据,保证有 。
参考程序:
'''[GESP202503 四级] 荒地开垦https://www.luogu.com.cn/problem/B4263'''defcheck(i, j):if i < 1or i > n or j < 1or j > m:return0if arr[i][j] == ".":if arr[i - 1][j] != "#"and arr[i + 1][j] != "#"and arr[i][j - 1] != "#"and arr[i][j + 1] != "#":return1return0n, m = map(int, input().split())# 初始化数据arr = [[""for _ in range(1005)] for _ in range(1005)]for i in range(1, n + 1): s = input()for j in range(1, len(s) + 1): arr[i][j] = s[j - 1]ans, max_ = 0, 0for i in range(1, n + 1):for j in range(1, m + 1):if arr[i][j] == ".": ans += check(i, j)else: arr[i][j] = "." temp = check(i, j) temp += check(i - 1, j) temp += check(i + 1, j) temp += check(i, j - 1) temp += check(i, j + 1) arr[i][j] = "#"if temp > max_: max_ = tempprint(ans + max_)青少年编程竞赛交流
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。
