You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python分页计算代码无法输出最后一个测试用例结果,求排查

问题分析:代码无法输出排名74对应页码的原因

问题背景

Chef参加竞赛获得排名X,需计算其所在的榜单页码,每页固定显示25名参赛者。输入规则为:第一行输入测试用例数T,每个测试用例输入一个排名X,输出对应页码。

测试用例

输入:

4
1
34
150
74

预期输出:

1
2
6
3

用户代码

arr = []
for i in range(x):
    m = int(input())
    arr.append(m)

times = 1

res = 25

end = 25
stt = 0

for i in arr:
    
    f = True
    while f:
        if i > stt and i < end+1:
            f = False
            print(times)
        else:
            times += 1
            stt = end 
            end = res * times

核心问题原因

你的代码在处理完前三个测试用例后,times、stt、end这几个变量的状态已经变成了:

  • times = 6
  • stt = 125
  • end = 150

当处理第四个排名74时,进入while循环后:

  1. 74并不大于125,触发else分支,times变成7,stt更新为150,end变成175
  2. 再次判断,74还是小于150,继续循环,times持续递增,stt和end也不断变大,永远满足不了i > stt and i < end+1的条件,直接陷入死循环,自然不会输出任何结果。

本质问题是:你没有为每个测试用例单独初始化页码相关变量,而是一直沿用前一个测试用例处理后的状态,导致小数值的排名无法匹配当前的区间范围。

修正方案

把times、stt、end的初始化代码移到处理每个测试用例的循环内部,确保每个排名都从第一页开始判断:

# 先修正原代码中未定义的x,改为获取测试用例数T
T = int(input())
arr = []
for i in range(T):
    m = int(input())
    arr.append(m)

for i in arr:
    # 每个测试用例都重置页码变量
    times = 1
    res = 25
    end = 25
    stt = 0
    f = True
    while f:
        # 把i < end+1改成i <= end,逻辑等价但更直观
        if i > stt and i <= end:
            f = False
            print(times)
        else:
            times += 1
            stt = end 
            end = res * times

更简洁的解法

其实这个问题不需要循环判断,用数学公式就能直接算出页码:(排名X + 24) // 25(整数除法)。原理是把排名向上取整到最近的25的倍数,再除以25。比如:

  • 74 +24 = 98,98 //25 =3,正好是正确页码
  • 150+24=174,174//25=6,符合预期

用这个方法的代码更高效简洁:

T = int(input())
for _ in range(T):
    X = int(input())
    print((X + 24) // 25)

内容的提问来源于stack exchange,提问作者Phani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:25:25