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

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

  • 2026-10-11 06:44:34
【第40期】21天养成编程习惯:Python刷题第02天

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

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

Day02:GESP一级2025.03_图书馆里的老鼠

【提交】

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

【问题描述】

图书馆里有  本书,不幸的是,还混入了一只老鼠,老鼠每  小时能啃光一本书,假设老鼠在啃光一本书之前,不会啃另一本。请问  小时后图书馆里还剩下多少本完整的书。

【输入描述】

三行,第一行一个正整数 ,表示图书馆里书的数量;

第二行,一个正整数 ,表示老鼠啃光一本书需要的时间;

第三行,一个正整数 ,表示经过的总时间;

输入数据保证  小时后至少会剩下一本书。

【输出描述】

一行,一个整数,表示  小时后图书馆里还剩下多少本书。

【样例输入1】

1023

【样例输出1】

8

【样例输入2】

524

【样例输出2】

3

【数据范围】

对于所有测试点,保证 ,保证  小时后至少会剩下一本书。

参考答案:

'''[GESP202503 一级] 图书馆里的老鼠https://www.luogu.com.cn/problem/B4257'''import mathn = int(input())x = int(input())y = int(input())print(n - math.ceil(y / x))

Day02:GESP二级2023.12_小杨的 H 字矩阵

【提交】

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

【问题描述】

小杨想要构造一个  的 H 字矩阵( 为奇数),具体来说,这个矩阵共有 行,每行  个字符,其中最左列、最右列都是 |,而中间一行(即第  行)的第  个字符都是 -,其余所有字符都是半角小写字母 a。例如,一个  的 H 字矩阵如下:

|aaa||aaa||---||aaa||aaa|

请你帮小杨根据给定的  打印出对应的“H 字矩阵”。

【输入描述】

一行一个整数 (,保证  为奇数)。

【输出描述】

输出对应的“H 字矩阵”。

请严格按格式要求输出,不要擅自添加任何空格、标点、空行等任何符号。你应该恰好输出  行,每行除了换行符外恰好包含  个字符,这些字符要么是 -,要么是 |,要么是 a。你的输出必须和标准答案完全一致才能得分,请在提交前仔细检查。

【特别提醒】

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

【样例输入1】

5

【样例输出1】

|aaa||aaa||---||aaa||aaa|

【样例输入2】

7

【样例输出2】

|aaaaa||aaaaa||aaaaa||-----||aaaaa||aaaaa||aaaaa|

参考程序:

'''GESP2023.12二级 小杨的 H 字矩阵https://www.luogu.com.cn/problem/B3924'''N = int(input())for i in range(N):for j in range(N):if j == 0or j == N - 1:            print('|', end='')elif i == N // 2:            print('-', end='')else:            print('a', end='')    print()

Day02:GESP三级2025.03_词频统计

【提交】

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

【问题描述】

在文本处理中,统计单词出现的频率是一个常见的任务。现在,给定  个单词,你需要找出其中出现次数最多的单词。在本题中,忽略单词中字母的大小写(即 Apple、apple、APPLE、aPPle 等均视为同一个单词)。

请你编写一个程序,输入  个单词,输出其中出现次数最多的单词。

【输入描述】

第一行,一个整数 ,表示单词的个数;

接下来  行,每行包含一个单词,单词由大小写英文字母组成。

输入保证,出现次数最多的单词只会有一个。

【输出描述】

输出一行,包含出现次数最多的单词(输出单词为小写形式)。

【样例输入1】

6ApplebananaappleOrangebananaapple

【样例输出1】

apple

【数据范围】

对于所有测试点,,每个单词的长度不超过 ,且仅由大小写英文字母组成。

参考答案:

'''[GESP202503 三级] 词频统计https://www.luogu.com.cn/problem/B4262'''lst = []n = int(input())for _ in range(n):    x = input()    lst.append(x.lower())s = ""cnt = 0for i in lst:    x = lst.count(i)if x > cnt:        cnt = x        s = iprint(s)

Day02:GESP四级2023.06_图像压缩

【提交】

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

【问题描述】

1、灰度图像有256级灰阶,编码00-FF,对应0-255,即图像有很多点,每个点取值是00到FF。编程压缩到16级灰阶,对应0-F。

2、压缩规则:统计出每种灰阶的数量,取数量最多的前16种灰阶(如某种灰阶的数量与另外一种灰阶的数量相同,则以灰阶值从小到大为序),分别编号0-F。其他灰阶转换到最近的16种灰阶之一,将某个点灰阶数与16种灰阶种的一种相减,绝对值最小即为最近。

3、输入:多行数据,每行数据等长,每两个字符构成一个点,十六进制;输出:首先连续最多输出16种灰阶编码,不足16种灰阶就按实际输出;然后各行输出压缩后的编码,每行等长。

【输入描述】

1、第1次输入正整数,表示有多少行数据。

2、随后输入行数据。

3、特别提示:常规程序中,输入时好习惯是有提示。考试时由于系统限定,输入时所 有input()函数不可有提示信息。

【输出描述】

1、首先输出16种灰阶编码,共计32个字符。不足16种按实际输出。输出数量最多的16种灰阶,从多到少;如某种灰阶的数量与另外一种灰阶的数量相同,则以灰阶值从小到大为序;

2、特别提示:注意输出字母为大写,小写将判为错误,数本身与字母T和F之前没有空格。

【样例输入1】

1000FFCFAB00FFAC09071B5CCFAB7600AFCBAB11FFAB09981D34CFAF5601BFCEAB00FFAC0907F25FCFBA6510FBCBAB11FFAB09981DF4CFCA6700FFCBFB00FFAC0907A25CCFFC7600FFCBAB1CFFCB09FC1AC4CFCF6701FCCBAB00FFAC0F071A54CFBA6510EFCBAB11FFAB09981B34CFCF6701FFCBAB00FFAC0F071054CFAC761000CBAB11FFAB0A981B84CFCF66

【样例输出1】

ABCFFF00CB09AC07101198011B6776FC321032657CD10E36409205ACC16DB41032657FD16D8F409205ACF14D324F326570D1FE3240C245FC411DBF4032687CD16D8F409205ACC11DB240326878D16E83409205ACE11D

【样例解释1】

灰阶'AB'、'CF'和'FF'出现14次,'00'出现10次,'CB'出现9次,'09'出现7次,'AC'出现6次,'07'出现5次,'10'、'11'和'98'出现4次,'01'、'1B'、'67'、'76'和'FC'出现3次。

参考程序:

'''[GESP202306 四级] 图像压缩https://www.luogu.com.cn/problem/B3851'''# 图像压缩defcomposePixel(topDict, srcVal):if srcVal in topDict:return hex(topDict[srcVal])[2:].upper()else:  # 不在列表中,计算最近距离        nearest = 255        nearestKey = "FF"for k, v in topDict.items():            tmpDistance = abs(int(srcVal, 16) - int(k, 16))if tmpDistance < nearest:                nearest = tmpDistance                nearestKey = vreturn hex(nearestKey)[2:].upper()N = int(input())dictDot = {}rawData = []newData = []for i in range(N):    dataLine = input()    rawData.append(dataLine)    charCount = len(dataLine)    groupCount = charCount // 2for i in range(groupCount):        twoHex = dataLine[i * 2:i * 2 + 2]  # 两个十六进制字符        dictDot[twoHex] = dictDot.get(twoHex, 0) + 1top16 = sorted(dictDot.items(), key=lambda x: (x[1], -int(x[0], 16)), reverse=True)[:16]top16Dict = {k: x for x, (k, v) in enumerate(top16)}for dataLine in rawData:    groupCount = len(dataLine) // 2    tmp = ""for i in range(groupCount):        tmp += composePixel(top16Dict, dataLine[i * 2:i * 2 + 2])    newData.append(tmp)for top in top16:    print(top[0], end="")print()for everyLine in newData:    print(everyLine)

青少年编程竞赛交流

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

最新文章

随机文章