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を>=にしても良いね。
とりあえず例外的なので注意。
初心者にオススメの本
この記事が気に入ったらサポートをしてみませんか?