Atcoder の ShiftOnly という問題についてです。
下のコードをPythonで書いて提出したのですが正解になりません。
コードをかなり改善してsampleは全部正解になったのですがまだ不正解の部分が残ってしまいます..
python
1#すべての整数を割ってから処理した回数カウントを増やしていく方法は 2#自分では出来なかったのでそれぞれの整数を何回割れるかカウント(c1)して 3#それらのカウントの最小値を求めることで答えを出す 4 5n = int(input()) 6a = list(map(int,input().split())) 7 8c1 = 0#処理の回数 9c2 = 0#最初に偶数がいくつあるか 10a2 = 0#偶奇を判断するための変数 11ans = 999999#俺の好きな9 12 13for a3 in a:#a3に一つずつaの要素が代入される 14 a2 = a3 % 2 15 if a2 == 0: 16 c2 += 1 17 18if c2 == n:#最初の数がすべて偶数だったら 19 for a2 in a: 20 while a2%2 == 0:#偶奇 21 a2 /= 2#÷2 22 if a2%2 == 0:#割って偶数だったら 23 c1 += 1#処理回数のカウントを増やす 24 ans = min(ans,c1)#c1の最小値を出す 25else: 26 ans = 0#最初の整数がすべて偶数じゃなかったら 27 28print(ans)
問題のURL
https://atcoder.jp/contests/abs/tasks/abc081_b
どこが間違ってるかどうしても分かりません。
回答よろしくお願いします<m(__)m>
解決後追記--
使わせてもらった yosukesan さんのコードに自分用とこれからこれを見る人がいるかもなので
解説を増やしました。
yosukesan さんの コード
Python
1#すべての整数を割ってから処理した回数カウントを増やしていく方法は 2#自分では出来なかったのでそれぞれの整数を何回割れるかカウント(c1)して 3#それらのカウントの最小値を求めることで答えを出す 4#teratail で修正してもらいました 5 6n = int(input()) 7a = list(map(int,input().split())) 8 9c1 = 0#処理の回数 10c2 = 0#最初に偶数がいくつあるか 11a2 = 0#偶奇を判断するための変数 12ans = 0#俺の好きな9 13 14for a3 in a:#a3に一つずつaの要素が代入される 15 a2 = a3 % 2 16 if a2 == 0: 17 c2 += 1#tが入っていた 18 19stop = True 20if c2 == n:#最初の数がすべて偶数だったら 21 while stop == True:#== Trueは省略可能 22 for i in range(0, len(a)): 23 if a[i]%2 == 0:#偶奇 24 a[i] /= 2#÷2 25 else:#奇数 26 stop = False 27 ans += 1 #全ての要素が偶数なのを確認したので、カウント+1 28 29else: 30 ans = 0#最初の整数がすべて偶数じゃなかったら 31 32print(max(ans-1,0))#26行 stop = False になってもその下に ans += 1があるので 33#奇数が出ても一度 ans += 1 されるので 出力するときに -1 34 35#max() で 最大値を出してるのは 奇数だったら ans = 0 なので 出力結果が -1 になってしまうのを防ぐため
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/09 10:42