AtCoder の [ABC081B - Shift only ]をpythonで解いているのですが(https://atcoder.jp/contests/abs/tasks/abc081_b)、下記のコードでは解くことが出来ませんでした。
python
1from sys import stdin 2 3n = stdin.readline() 4 5aaa = list(map(int,input().split())) 6 7count = 0 8 9def calc_div(n): 10 return n / 2 11 12all([x % 2 == 0 for x in aaa])#ifリスト内が全部偶数か確認 13 14while True: #ifリスト内が全部偶数の時 15 16 aaa = list(map(calc_div , aaa)) 17 count += 1 18 all([x % 2 == 1 for x in aaa]) 19 20print(count)
他の方の回答や解き方を見て、理解することはできたのですが自分なりのコードで通せるようにしたいです。
独学でプログラミングを勉強し始めたばかりなので、基本的なところを間違えている可能性が高いです。
今まで自分でどこを間違えているのか調べたことを下記に記します。
・コマンドプロンプトで起動したところ、何も表示されずに終了してしまうため、whileの中から抜け出せていないと思い、whileの中でcount=100でbreakする条件をつけ足しました。→count=100のところで抜け、リストの中身を表示してみたところオブジェクトの型らしきものしか表示されませんでした。
・map関数の戻り値がシーケンス?であるためうまく表示されていないことがわかり、list型に変換しました。
・もう一度実行したところ、while条件式の中を抜けることがなくcount=100のところのリストの中身は何回も割った数字になっていました(例 3.0154425151e-22)
このことから、
・奇数になった際に判定がTRUEに変わっていない
・while の条件式でFALSEになっても実行されてしまう。
・2で割る処理が正しくない
等がうまく実行されない原因だと思いますが、躓いてしまいました。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/05 12:51