Kattis Combination Lock问题代码报错求助:无法定位错误
问题分析与修正
你的代码核心错误是多算了一圈(360度):初始total =720已经包含了第一步和第二步各需要的一圈(360+360),但你在第一步计算后又额外加了total +=360,导致第二步的旋转度数多算了一整圈,这就是Wrong Answer的原因。
另外还有一个不影响运行的拼写错误:postiton应该是position,建议修正以提高代码可读性。
修正后的代码
def main(): userInput = [40 if x == 0 else x for x in map(int, input().split())] position = userInput[0] one = userInput[1] two = userInput[2] three = userInput[3] total = 720 # 第一步和第二步各需转一圈,共720度 # 第一步:逆时针从起始位置转到第一个密码 if position > one: total += (position - one) * 9 elif position < one: total += (40 - (one - position)) * 9 # 第二步:顺时针从第一个密码转到第二个密码 if two > one: total += (two - one) * 9 elif two < one: total += (40 - (one - two)) * 9 # 第三步:逆时针从第二个密码转到第三个密码 if two > three: total += (two - three) * 9 elif two < three: total += (40 - (three - two)) * 9 print(total) if __name__ == "__main__": main()
关键逻辑验证
以全相同输入10 10 10 10为例:
- 修正前代码计算结果为
1080(多了360度) - 修正后代码计算结果为
720,符合题目要求(第一步转一圈+第二步转一圈+第三步无旋转)
排查建议
- 重新核对题目每一步的旋转要求,确保每一步的基础旋转圈数和方向都正确对应
- 用极端测试用例验证(比如所有数字相同、起始位置与第一个密码刚好差一圈等)
- 把代码的计算过程拆解成每一步的中间值打印出来,对比手动计算的结果,快速定位差异点
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

