見出し画像

AtCoder:ShiftOnly by Python

今回は、前回に引き続きAtCoderの問題をやって行きたいと思います!!

今回の問題は入力された数字がすべて偶数だった場合は2で割り割れなくなるまで繰り返し処理を行い処理できる回数を出力するというものです。
問題はこちら→https://atcoder.jp/contests/abs/tasks/abc081_b

全体のコードはこちら↓

n = int(input())
dx = list(map(int,input().split()))
count = 0

while (1):
   for i in range(n):
       if dx[i] % 2 == 0:
          dx[i] /= 2 
          
       
       else:
           print(count)
           exit()
   count +=1

まずは処理する数字の数を"n"で定義して入力します。
その後、"dx"にリストとして入力を行います!
(前回リストには"int"は入力できないようなことを書きましたが、今回は"map"関数を使って入力を行っています。この辺は別で書きます。また、"map"で入力をしてそれをリストと表現して良いのかは分かりませんが、今回に関してはリストで統一します! )

"count"は例のごとく0を代入しておきます。

"while(1)"で永遠に繰り返すwhile文ですがこれは、処理を最後まで行わせるために入れています。その後else で"exit()"を使って処理を終了させています。これが無ければこのプログラムはずっとループしていきます。

その後"for"文を使いdx[]の値を順に if文とelse文で分岐させていきます。

"count"の位置が少し厄介だったんですけど、これは"if"の中に入れてしまうと、"dx[]"の一つ一つを処理している時にプラスになってしまいます。
例)3
  2 4 8
と入力された場合、2の処理で一回、4の処理で一回、8の処理で一回とカウントされてしまいます。それを防ぐために"if"のそとに置いています。仮にこれを"for"のすぐ後に持ってきた場合は偶数じゃないときもプラスされてしまうので最後に置きます。(プログラムは上から順に処理されるため)

その後、"exit()"を"else"の中に入れてプログラムを終了します。

今回はこんな感じでまとめてみました。 
最後まで読んでいただきありがとうございます。

コラム
今回の入力方法を前の問題でも使えるのかやってみたいと思います!

前回のコード↓

x = 0
i = input()
dx = [i[0],i[1],i[2]]   
count = 0
for i in dx:
   if i == '1':
       count+=1
print(count)

これの、"i"への入力を変えます

dx = list(map(int,input().split()))
count = 0
for i in dx:
   if i == 1:
       count +=1
print(count)

こんな感じですかね?
これで実行してみたんですけど(コードテスト)結果はきちんと出力されるんですけど、提出してみると不正解になってしまいました。もう少し調べてやってみます!!

最後まで、読んでいただきありがとうございます!!

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