- 您的通关代码,也是模拟的戴夫和豌豆炮与僵尸的对抗过程哦😊,我已全部注释“可疑”行。
我依旧纠结,僵尸半路被干倒的话,为什么倒下后还得移动一秒,结果才能达“题目预期输出”
我注释了您的通关代码
#from math import floor
#N, M, L, K, V = list(map(int, input().split(' ')))
N, M, L, K, V = 15, 10, 1000, 100, 5 # 您的代码与题目样例要求一致,返回940,我终究认为是935。
N, M, L, K, V = 2, 10, 1000, 800, 1 # 您的代码与题目样例要求一致,返回200,我终究认为是201。
time = (L - 100) / V
#hit = N * floor(time / 2) # 这样子操作和之前的int函数没有差别的,能通过的关键点不在这里。
hit = N * (time // 2) # “//”这也是地板除运算符,相当于floor。
if hit >= K: # 僵尸可能承受的全部攻击超过其血量。
#n = 1 # 初值应是可以攻击的2。
n = 2 # 豌豆弹攻击标识初值,可以攻击。
#k = K # 此变量可以不用设置,直接用K。因为这分支完成执行后程序也结束了,不存在污染变量K的问题。
while L >= 0: # 循环模拟豌豆、僵尸对抗。
L -= V # 僵尸移动。
#n += 1 # 我认为冷却计时应放在攻击之后。
if n == 2: # 豌豆炮冷却完成,可以攻击。
n = 0 # 攻击后重置冷却计时。
K -= N # 僵尸因豌豆弹攻击而失血。
n += 1 # 豌豆炮冷却计时。
if K <= 0: # 干倒僵尸。
L -= V # 我纠结的就是这里,僵尸已倒,怎么还要移动一步?
print(L)
break
else:
if hit + M >= K:
print(0)
else:
#blood = K - (M + N * floor(time / 2))
#print(f'......oh~NO!{blood}')
print(f'......oh~NO!{K - (M + hit)}') # 可以利用前面已计算出来的变量,应该节约点时间。
代码已完成调试,运行正常。
- N, M, L, K, V = 15, 10, 1000, 100, 5
对于这组输入,您的代码输出
显然不是预期。第7次攻击打倒了僵尸,1000 - 5×7(有豌豆弹攻击) - 5×6(无攻击) = 935,应该输出935才对。
您的代码
#N, M, L, K, V = list(map(int, input().split(' ')))
N, M, L, K, V = 15, 10, 1000, 100, 5
time = (L - 100) / V # 僵尸可以移动的最大次数。
hit = N * (time // 2) # 僵尸承受的最大攻击。
if hit >= K: # 打倒僵尸。
x = int(L - V * (K / N * 2))
print(x)
else:
if hit + M >= K: # 僵尸被平底锅爆头而亡。
print(0)
else: # 僵尸被平底锅爆头而不倒。
print(f'......oh~NO!{K-(hit+M)}') # 这一行用了前面您前边求出的变量。
我用模拟游戏对战的循环写成的代码,题目给出的第一样例,我得到了201,正纠结于是我不对,还是样例有错😣😣
样例N, M, L, K, V = 15, 10, 1000, 100, 5
输出
您也帮我瞅瞅,错在哪儿了我。
'''
N 豌豆弹威力(间隔2s攻击一次)
M 戴夫平底锅爆头威力
L 僵尸初始位置
K 僵尸初始血量
V 僵尸速度 cm/s
'''
#N, M, L, K, V = map(int, input('\n输入:\n ').strip().split())
N, M, L, K, V = 2, 10, 1000, 800, 1
#N, M, L, K, V = 1, 10, 1000, 800, 1
N, M, L, K, V = 15, 10, 1000, 100, 5
kill = 2 # 豌豆射手攻击标识。
while L > 0:
print(N, M, L, K, V)
L -= V # 僵尸前进。
if kill == 2 and L > 100:
K -= N # 炮击僵尸。
kill = 0 # 重置攻击标识。
if K <= 0: # 僵尸被击倒,输出僵尸当前位置并退出程序。
print('\n输出:\n', L)
exit()
kill += 1 # 炮击间隔计数。
if L <= 0: # 如果僵尸到达戴夫门前,据其血量打印相应提示信息后退出程序。
K -= M # 戴夫平底锅爆头僵尸。
tip = L if K <=0 else f"oh~NO! {K}"
tip = 0 if K <=0 else f"oh~NO! {K}" # 也可以直接写0位置。
print('\n输出:\n', tip)
exit()