Python 我该如何解决这个问题;前进和后退问题;? 问题陈述:
桑杰对酒精上瘾。每天晚上他喝4瓶伏特加。他要回家了。起初,他向前走了一步(5米),但因为他喝醉了,在他向前走的每一步后,他的身体变得不平衡,他向后退了一步(3米) 每一步需要1分钟才能完成。酒吧到家的距离是n米。计算他到达家所花的时间 输入格式: 包含一个整数n的单行 限制条件: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米
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)