0
0

シミュレーションの練習

Posted at

n = int(input())
a,b = map(int,input().split())
paiza_score = 1
kirijima_score = 1
cnt = 0

while n > kirijima_score:
    #paiza_turn
    kirijima_score = paiza_score * a
    #kirijima_turn
    paiza_score += kirijima_score % b
    #turn_end
    cnt += 1
    
print(cnt)


これでいいかな?と思ったんですがだめでした。
じっくり問題読むと、つまりキリジマのスコアがnを超えたときってことなので
それはつまり、キリジマのスコアが動いた時に判定しなきゃ意味がないんですね。
だからwhileの条件判定じゃだめってこと。
だから

n = int(input())
a,b = map(int,input().split())
paiza_score = 1
kirijima_score = 1
cnt = 0

#while条件はTrueに変更
while True:
    kirijima_score += paiza_score * a
    #この時点で判定する
    if n < kirijima_score:
        break
        
    #kirijima_turn 
    paiza_score += kirijima_score % b
    #turn_end
    cnt += 1
    
print(cnt)

あれ、、、だめでしたね。。
こうするとテストケースが1になってしまいました。
テストケースは6と3,2でしたね
n = 6
a,b = 3,2
kirijima = 4
paiza = 3
cnt = 1

で次に、
kirijima = 13
で超えたのでおわり
cnt = 1のままでしたね。。。
ってことは回数を増やすのは最初でないとだめだ。

n = int(input())
a,b = map(int,input().split())
paiza_score = 1
kirijima_score = 1
cnt = 0

#while条件はTrueに変更
while True:
    cnt += 1
    kirijima_score += paiza_score * a
    #この時点で判定する
    if n < kirijima_score:
        break
    paiza_score += kirijima_score % b
    
    
print(cnt)

OKでした。
なかなかここらへん、どこで回数増やすべきなのかってのが
分かりづらいんですよね。。。
一番最初に回数を増やすべきか、最後にするべきかの判断をどう考えればいいかが、難しいです。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0