当前位置:首页>python>【第40期】21天养成编程习惯:Python刷题第17天

【第40期】21天养成编程习惯:Python刷题第17天

  • 2026-10-11 06:28:14
【第40期】21天养成编程习惯:Python刷题第17天

跟老马一起“升级打怪”学编程!

  • 涉及考试:计算机学会编程能力等级认证(GESP)、电子学会等级考试
  • 活动内容:提供不同等级的真题供小朋友们选择练习
  • 备考建议:根据自己备考的等级选择相应题目
  • 附加价值:可作为白名单比赛的备考训练
  • 本月打卡:本月GESP_Python打卡题目

Day17:GESP一级2026.03_数字替换

【提交】

https://www.luogu.com.cn/problem/B4496

【问题描述】

Alice 不喜欢数字 4,但觉得数字 8 寓意好,她想把数中的 4 全都替换成 8,若数中不含 4 则无需修改,你能帮帮她吗?

【输入描述】

输入一行,包含一个整数 ,表示要替换前的数。

【输出描述】

输出一行,包含一个整数 ,表示替换后的数。

【样例输入1】

8459045

【样例输出1】

8859085

【样例输入2】

123

【样例输出2】

123

【样例解释】

对于样例1,输入 8459045 中有两个 4,都将其替换为了 8,得到 8859085。

对于样例2,输入 123 中不包含 4,无需修改输入数字,输出 123。

【数据范围】

。

参考程序:

'''[GESP202603 一级] 数字替换https://www.luogu.com.cn/problem/B4496'''A = int(input())B = 0k = 1while A != 0:    c = A % 10if c == 4:        c = 8    B += c * k    k *= 10    A = A // 10print(B)

Day17:GESP二级2026.03_画画

【提交】

https://www.luogu.com.cn/problem/B4498

【问题描述】

输入一个正整数 ,你需要绘制一个  行  列的正方形,绘制规则如下:

  • 正方形的四个顶点使用 + 绘制;
  • 除顶点外,第  行与第  行使用 - 绘制;
  • 除顶点外,第  列与第  列使用 | 绘制;
  • 正方形内部使用 * 绘制。

【输入描述】

一行,一个正整数 。

【输出描述】

输出共  行,表示对应的正方形。

【样例输入1】

5

【样例输出1】

+---+|***||***||***|+---+

【数据范围】

保证 。

参考程序:

'''[GESP202603 二级] 画画https://www.luogu.com.cn/problem/B4498'''n = int(input())for i in range(n):for j in range(n):if i == 0or i == n - 1:# 第一行或最后一行if j == 0or j == n - 1:                print('+', end="")else:                print('-', end="")else:# 中间行if j == 0or j == n - 1:                print('|', end="")else:                print('*', end="")    print()

Day17:GESP三级2026.03_二进制回文串

【提交】

https://www.luogu.com.cn/problem/B4499

【问题描述】

对于一个正整数 ,我们将其转换为不含前导零的二进制表示,如果这个二进制序列从左向右读与从右向左读完全相同,则称该数为二进制回文数。例如, 的二进制表示为  ,是二进制回文数; 的二进制表示为 ,不是二进制回文数。

你的任务是:给定一个正整数 ,计算在  到  的范围内二进制回文数的数量。

【输入描述】

输入一行,包含一个正整数 。

【输出描述】

输出一行,包含一个数,表示在  到  的范围内二进制回文数的数量。

【样例输入1】

15

【样例输出1】

6

【样例解释】

样例 1 中, 到  范围内 、、、、、 是二进制回文数。

【数据范围】

。

参考程序:

方法一:

"""[GESP202603 三级] 二进制回文串https://www.luogu.com.cn/problem/B4499"""n = int(input())i = 1cnt = 0while i <= n:    s = ""    j = iwhile j != 0:        s = str(j % 2) + s        j = j // 2    i += 2if s == s[::-1]:        cnt += 1print(cnt)

方法二:

"""[GESP202603 三级] 二进制回文串https://www.luogu.com.cn/problem/B4499"""n = int(input())cnt = 0for i in range(1, n + 1):    binary = bin(i)[2:]  # 获取二进制字符串(去掉 '0b' 前缀)if binary == binary[::-1]:  # 判断是否回文        cnt += 1print(cnt)

Day17:GESP四级2026.03_礼盒排序

【提交】

https://www.luogu.com.cn/problem/B4502

【问题描述】

商店推出了许多礼盒,每个礼盒中包含  件商品,每件商品都有一个价格。

现在需要对这些礼盒进行排序,排序规则如下:

  1. 先按 礼盒总价格从小到大 排序;
  2. 如果总价格相同,按 礼盒中最贵商品的价格从小到大 排序;
  3. 如果仍然相同,按 礼盒中最便宜商品的价格从小到大 排序;
  4. 如果仍然相同,按 礼盒编号从小到大 排序。

请输出排序后的礼盒编号。

【输入描述】

第一行包含两个整数  和 ,分别表示礼盒数量和每个礼盒中商品的数量。

接下来  行,每行包含  个整数,第  行表示第  个礼盒中各商品的价格。

【输出描述】

输出一行,包含排序后的礼盒编号(编号从  开始),用空格分隔。

【样例输入1】

4 33 5 24 1 52 2 43 4 3

【样例输出1】

3 4 2 1

【样例解释】

4 个礼盒分别为:

编号
商品价格
总价
最大值
最小值
1
3 5 2
10
5
2
2
4 1 5
10
5
1
3
2 2 4
8
4
2
4
3 4 3
10
4
3

排序过程:

  1. 按总价排序,3号礼盒总价最小;
  2. 其余总价均为 10,再按最大值排序,4号最大值更小;
  3. 1号和2号最大值相同,再按最小值排序,2号更小。

最终顺序为:3 4 2 1

【数据范围】

保证 ,,商品价格 。

参考程序:

'''[GESP202603 四级] 礼盒排序https://www.luogu.com.cn/problem/B4502'''n, k = tuple(map(int, input().split()))lst = []for i in range(1, n + 1):    d = list(map(int, input().split()))    lst.append([sum(d), max(d), min(d), i])lst.sort()result = " ".join([str(i[3]) for i in lst])print(result)

青少年编程竞赛交流

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。

最新文章

随机文章