AtCoder Beginner Contest 068 B - Break Number python

問題文

高橋君は 22 で割れる数が好きです。

正整数 N が与えられるので、11 以上 N 以下の整数のうち、最も 22 で割れる回数が多いものを求めてください。答えは必ず 11 つに定まります。

なお、22 で割っていき、何回あまりが出ずに割れるかを、22 で割れる回数と呼ぶことにします。

例えば

  • 66 ならば、66 -> 33で、11 回 22 で割れます。

  • 88 ならば、88 -> 44 -> 22 -> 11で、33 回 22 で割れます。

  • 33 ならば、00 回 22 で割れます。

コード

N=int(input())
division=0 #Nが1のときansを書き換えられるように 
maxdivision=-1 #0を割っても0になる例外に注意 
for i in range(1,N+1):
    i_copy=i
    division=0
    while(i%2==0):
        i=i//2
        division+=1
    if(division>maxdivision):
        maxdivision=division
        ans=i_copy

print(ans)
    

相当間違いがあった。
考えなければならない枠組みは2つ。
1.
全探索で、それぞれの数字で割る数を出すこと。
2.
割る回数が今までの最高を超えたとき、それを更新すること。

学び
・0は割っても一生あまりが0。1から始めるように。
・N=1のとき、割る数が0回で、maxdivisionを超えない。なのでmaxdivisionの初期値を-1にした。
今回の場合だとdivision>maxdivisionを>=にしても良いね。
とりあえず例外的なので注意。


初心者にオススメの本


この記事が気に入ったらサポートをしてみませんか?