GESP Python 一级 2025年3月编程题讲解

先列出最后两道编程题原题,再用时间轴和数轴展示数学原理,最后给出每一行都有注释的 Python 程序。

1最后两道编程题原题

3.1 编程题 1:图书馆里的老鼠

时间限制:1.0 s 内存限制:512.0 MB

题目描述

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

输入格式

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

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

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

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

输出格式

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

样例

输入样例 110
2
3
输出样例 18
输入样例 25
2
4
输出样例 23

数据范围

对于所有测试点,保证 1 ≤ n, x, y ≤ 1,000,保证 y 小时后至少会剩下一本完整的书。

3.2 编程题 2:四舍五入

时间限制:1.0 s 内存限制:512.0 MB

题目描述

四舍五入是一种常见的近似计算方法。现在,给定 n 个整数,你需要将每个整数四舍五入到最接近的整十数。例如,43 四舍五入后为 40,58 四舍五入后为 60。

输入格式

n + 1 行,第一行,一个整数 n,表示接下来输入的整数个数。

接下来 n 行,每行一个整数 ai,表示需要四舍五入的整数。

输出格式

n 行,每行一个整数,表示每个整数四舍五入后的结果。

样例

输入样例 15
43
58
25
67
90
输出样例 140
60
30
70
90

数据范围

对于所有测试点,保证 1 ≤ n ≤ 100,1 ≤ ai ≤ 10000。

2数学原理可视化

图书馆里的老鼠:完整书本要减去“已啃光”和“正在啃”的书

核心是向上取整:只要老鼠碰过一本书,这本书就不再是完整的书。

不完整书本数 = ceil(y / x) 剩余完整书本数 = n - ceil(y / x)
  • 如果 y // x 是已经啃光的本数,y % x 是还没啃完的剩余时间。
  • y % x > 0 时,老鼠正在啃下一本,这一本也不完整,所以还要再减 1。
  • 样例 1:n=10, x=2, y=3,老鼠碰过第 1、2 本书,剩下 8 本完整书。
1已啃光
1正在啃
8剩余完整
已啃光 正在啃 完整书

四舍五入到整十数:个位小于 5 向下,个位大于等于 5 向上

核心是把分界线放在 5:先加 5,再整除 10,就能自动跨过分界线。

答案 = (x + 5) // 10 * 10 43 → 40,58 → 60,25 → 30
  • x + 5:把 5 到 9 的个位推到下一个十位。
  • // 10:去掉个位,得到十位的数量。
  • * 10:再变回整十数。
3个位
向下方向
40结果
舍到较小整十数 入到较大整十数 当前数字

3逐行注释程序

3.1 图书馆里的老鼠

n = int(input())  # 读入图书馆原来有多少本书
x = int(input())  # 读入老鼠啃光一本书需要多少小时
y = int(input())  # 读入已经经过了多少小时
ans = n - y // x  # 先减去已经被完整啃光的书本数
if y % x > 0:  # 如果还有不足 x 小时的剩余时间,说明老鼠正在啃下一本
    ans -= 1  # 正在被啃的这本已经不是完整的书,也要再减掉一本
print(ans)  # 输出 y 小时后还剩下的完整书本数

等价思路:先算 ceil(y / x) 本书变得不完整,再用 n 减掉它。

3.2 四舍五入

n = int(input())  # 读入接下来需要处理的整数个数
for i in range(n):  # 循环 n 次,每次处理一个整数
    x = int(input())  # 读入当前需要四舍五入的整数
    ans = (x + 5) // 10 * 10  # 先加 5,再整除 10 后乘 10,得到最接近的整十数
    print(ans)  # 输出当前整数四舍五入后的结果

因为题目保证输入是正整数,所以这个公式可以直接处理所有测试数据。