#はじめに
AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiita
こちらの記事を参考に初心者がAt corderに挑戦します。
目的としては、就職活動でのコーディングテスト対策です。
毎日1問を目標としてコツコツやってきます
わからないことは調べる精神です。ちょっとでもわからないなぁ、と思ったことは調べて解説と参考文献を載せますので、同じ内容でわからない人がいれば参考にししてください
#問題 ABC081B - Shift only
N個の正の整数$A_1 ,...,A_N$がある。この整数が全て偶数のとき、すべての整数を2で割ったものに置き換える。最大で何回操作を行うことができるか求めよ
#入力 出力
###入力
N
A1 A2 ... An
###出力
最大で何回操作を行うことができるか出力せよ
###入力例
3
8 12 40
###出力例
2
1回目[4,6,10]、2回目[2,3,5]となり奇数が現れるため、答えは2となる
#回答
N=gets.to_i
numbers=gets.chomp.split(" ").map(&:to_i)
min = 99
numbers.each do |sum|
count = 0
while sum % 2 == 0 do
count = count + 1
sum = sum/2
end
if (count < min ) then
min = count:confused:
end
end
puts min
#解説
Nは入力を受け付けたが、プログラムの中には活用しませんでした。
受けた数字をそれぞれ偶数か判断し、偶数ならばcountを+1して、対象の値を2でわる。countの数字が一番小さいものをminに保存し、それを出力する。
#感想
ここから難しくなってきました。問題文を読んだ段階では最小値を出力するという発想は出てきませんでした。プログラミングらしい!
最初sumをAとしていましたが、エラーが出てしまいました。どうしてダメだったんでしょうか。。わかる方がいらっしゃればご教示くださると嬉しいです
endの場所をputs ~の後ろにしていたせいで、出力がミスってました。気をつけよう!
参考文献
Array#each (Ruby 3.0.0 リファレンスマニュアル)
Atcoder Beginners SelectionをRubyで解いてみた - Kasasagi's memorandum