【发布时间】:2022-01-25 10:16:13
【问题描述】:
我目前在 Kattis (https://open.kattis.com/problems/digits) 上做一个问题。
任务说明如下:
给定任意数 x0,使用以下递归式定义一个序列 xi+1=xi 的十进制表示中的位数 你的任务是确定最小的正数 i 使得 xi=xi−1。
我最初想出了代码A,但是在代码A未能满足时间限制后,我稍微修改了代码以达到代码B。
示例输入
42
5
END
样本输出
3
2
代码 A:
#time limit exceeded
def recurrence_index(prev):
counter = 1
while True:
current = len(str(prev))
if current == prev:
return counter
else:
counter += 1
prev = current
while True:
initial = input().strip()
if initial == 'END':
break
initial = int(initial)
print(recurrence_index(initial))
代码 B:
def recurrence_index(prev):
counter = 2
while True:
current = len(str(prev))
if current == prev:
return counter
else:
counter += 1
prev = current
while True:
initial = input().strip()
if initial == 'END':
break
l = len(initial)
if l == 1 and int(initial) == 1:
print(1)
else:
print(recurrence_index(l))
不幸的是,我不太清楚为什么代码 B 比代码 A 快。看来我是靠运气得出了正确的答案。如果有人可以帮助解释为什么代码 B 比代码 A 快,您的帮助将不胜感激。谢谢!
【问题讨论】:
-
“看来我是靠运气得出了正确的答案。* - 不,您似乎准确地确定了问题所在并解决了问题。
-
@KellyBundy 嗯我不太清楚为什么我基本上是在搞乱参数以试图使代码更快;代码 B 与代码 A 的唯一不同之处在于,代码 B 将比代码 A 更快地解决初始输入 1。但是,我认为节省的时间将是微不足道的,因为其中一个测试用例有一个 googol 数字。