H = int(input())
P_dmg_1 = 1
P_dmg_2 = 1
M_dmg_1 = 1
M_dmg_2 = 1
#turnは3から
#Hははじめから2減らす
turn = 2
H = 35- 2
while True:
turn += 1
P_dmg_1 = P_dmg_2
P_dmg_2 = M_dmg_1 + M_dmg_2
M_dmg_1 = M_dmg_2
M_dmg_2 = P_dmg_1 + P_dmg_2 * 2
H -= M_dmg_2
if H < 0:
break
print(turn)
H = int(input())
P_dmg_1 = 1
P_dmg_2 = 1
M_dmg_1 = 1
M_dmg_2 = 1
#turnは3から
#Hははじめから2減らす
turn = 2
H = 35- 2
while True:
turn += 1
P_dmg_1 = P_dmg_2
P_dmg_2 = M_dmg_1 + M_dmg_2
M_dmg_1 = M_dmg_2
M_dmg_2 = P_dmg_1 + P_dmg_2 * 2
#とりあえずプリント
print(P_dmg_1)
print(P_dmg_2)
print(M_dmg_1)
print(M_dmg_2)
H -= M_dmg_2
if H < 0:
break
print(turn)
1 ← P2回目
2 ← P3回目
1 ← M2回目
5 ← M3回目(???)
2
6
5
14
6
19
14
44
手動で計算すると
ケース1
1回目
HP 7
Pの攻撃1
Mの攻撃1
2回目
HP 6
Pの攻撃1
Mの攻撃1
3回目
HP 5
Pの攻撃 1+1 = 2
Mの攻撃1 1*2 + 1 = 3
4回目
HP 2
Pの攻撃 2+1 = 3
Mの攻撃1 3*2 + 1 = 7
この時点HP0
ケース2
1回目
HP 35
Pの攻撃1
Mの攻撃1
2回目
HP 34
Pの攻撃1
Mの攻撃1
3回目
HP 33
Pの攻撃 1+1 = 2
Mの攻撃1 1*2 + 1 = 3
4回目
HP 30
Pの攻撃 3+1 = 4
Mの攻撃1 2*2 + 1 = 5
5回目
HP 25
Pの攻撃 5+3 = 8
Mの攻撃1 5*2 + 3 = 13
6回目
HP 13
Pの攻撃 13+5 = 18
Mの攻撃1 13*2 + 5 = 31
この時点でHP0
なので、ちょっと変ですね。。。
なんでかというと、
P_dmg_1 = P_dmg_2
P_dmg_2 = M_dmg_1 + M_dmg_2
M_dmg_1 = M_dmg_2
M_dmg_2 = P_dmg_1 + P_dmg_2 * 2
これだと、P_dmg_2はすでに今回分になってしまっているので、前回分のにならないからですね。。。orz
だから、ずらす動作と、計算要素は別にしないとだめらしいです。
時間がもうなかったので答えを見ました。
こっちは配列ですが思った通りずらしてましたね。。。
H = int(input())
a = [0, 1, 1]
b = [0, 1, 1]
dmg = 2
i = 2
while dmg < H:
a[0] = a[1]
a[1] = a[2]
b[0] = b[1]
b[1] = b[2]
a[2] = b[0] + b[1]
b[2] = a[0] + 2*a[1]
dmg += b[2]
i += 1
print(i)
勉強になりました!