Python 我该如何解决这个问题;前进和后退问题;? 问题陈述:

Python 我该如何解决这个问题;前进和后退问题;? 问题陈述:,python,python-3.x,performance,Python,Python 3.x,Performance,桑杰对酒精上瘾。每天晚上他喝4瓶伏特加。他要回家了。起初,他向前走了一步(5米),但因为他喝醉了,在他向前走的每一步后,他的身体变得不平衡,他向后退了一步(3米) 每一步需要1分钟才能完成。酒吧到家的距离是n米。计算他到达家所花的时间 输入格式: 包含一个整数n的单行 限制条件: 0=n: 打破 x-=3 m+=1 打印(m) 但是,在最后一个测试案例中,即对于n=10^18的类似数字,时间限制已超过 样本输入0 十一, 样本输出0 七, 所用时间仅为n/2*2 他每“循环”前进2米,向前5米

桑杰对酒精上瘾。每天晚上他喝4瓶伏特加。他要回家了。起初,他向前走了一步(5米),但因为他喝醉了,在他向前走的每一步后,他的身体变得不平衡,他向后退了一步(3米)

每一步需要1分钟才能完成。酒吧到家的距离是n米。计算他到达家所花的时间

输入格式: 包含一个整数n的单行

限制条件:
0=n:
打破
x-=3
m+=1
打印(m)
但是,在最后一个测试案例中,即对于n=10^18的类似数字,时间限制已超过

样本输入0

十一,

样本输出0

七,


所用时间仅为n/2*2 他每“循环”前进2米,向前5米,向后3米 因此,我们可以看到n(n/2m)中有多少个“循环”,这将产生结果 在到达他家的“周期”中 然后我们简单地乘以每个周期所用的时间(2分钟)
获取所用的总时间(t=n/2*2)

尝试减少问题。让
time\u take(dist)
函数告诉我们到家需要多长时间。那么,以下内容将被保留:

time_taken(1)  ==  1
time_taken(2)  ==  1
time_taken(3)  ==  1
time_taken(4)  ==  1
time_taken(5)  ==  1

time_taken(6)  ==  1 * 2 + time_taken(4)    (since 5-3 = 2)
               ==  1 * 2 + 1

time_taken(7)  ==  1 * 2 + time_taken(5)
               ==  1 * 2 + 1

time_taken(11) ==  1 * 2 + time_taken(9)
               ==  2 * 2 + time_taken(7)
               ==  3 * 2 + time_taken(5)
               ==  3 * 2 + 1

time_taken(26) ==  1 * 2 + time_taken(24)
               ==  2 * 2 + time_taken(22)
               ==  ...
               ==  11 * 2 + time_taken(4)
               ==  11 * 2 + 1

if n > 5:
time_taken(n)  ==  1 * 2 + time_taken(n - 2)
               ==  2 * 2 + time_taken(n - 4)
               ==  ...
               ==  (formula here) * 2 + time_taken(4 or 5)

请您澄清什么问题是“上一个测试用例中的时间限制超过了!”这是没有意义的。@SimonN可能是codewars/hackerrank问题或类似问题您可以在
O(1)
time中解决此问题。。。提示:解决方案大约是
n/((5-2)/2)
。我认为正确的解决方案根本不涉及循环。这与其说是编程问题,不如说是一个简单的数学问题。¯\\_(ツ)_/’否:如果5米的步子到家了,这很重要。大约是n/2,但不完全正确。不,如果是这样,那么11米的步子,他需要11分钟,而不是7分钟。感谢你试图温和地引导OP自己解决问题,但这个问题已经偏离主题很远了。我们没有这样做任何有代码的东西都可以,但是要绕着房子去梳理一道非常简单的数学题的答案。
from math import *
n = int(input())
x = 0
m = 0
n = n % 1000000007
n = n % 1000000007
while  x < n:
    x += 5
    m += 1
    if x >= n:
        break
    x -= 3
    m += 1
print(m)
time_taken(1)  ==  1
time_taken(2)  ==  1
time_taken(3)  ==  1
time_taken(4)  ==  1
time_taken(5)  ==  1

time_taken(6)  ==  1 * 2 + time_taken(4)    (since 5-3 = 2)
               ==  1 * 2 + 1

time_taken(7)  ==  1 * 2 + time_taken(5)
               ==  1 * 2 + 1

time_taken(11) ==  1 * 2 + time_taken(9)
               ==  2 * 2 + time_taken(7)
               ==  3 * 2 + time_taken(5)
               ==  3 * 2 + 1

time_taken(26) ==  1 * 2 + time_taken(24)
               ==  2 * 2 + time_taken(22)
               ==  ...
               ==  11 * 2 + time_taken(4)
               ==  11 * 2 + 1

if n > 5:
time_taken(n)  ==  1 * 2 + time_taken(n - 2)
               ==  2 * 2 + time_taken(n - 4)
               ==  ...
               ==  (formula here) * 2 + time_taken(4 or 5)