LoginSignup
1
0

More than 3 years have passed since last update.

【At Corder】【初心者】ABC081B - Shift only をRuby で解いてみた

Last updated at Posted at 2021-04-03

はじめに

AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiita

こちらの記事を参考に初心者がAt corderに挑戦します。
目的としては、就職活動でのコーディングテスト対策です。
毎日1問を目標としてコツコツやってきます:thinking:

わからないことは調べる精神です。ちょっとでもわからないなぁ、と思ったことは調べて解説と参考文献を載せますので、同じ内容でわからない人がいれば参考にししてください:baby:

問題 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に保存し、それを出力する。

感想

ここから難しくなってきました。問題文を読んだ段階では最小値を出力するという発想は出てきませんでした。プログラミングらしい!:confused:
最初sumをAとしていましたが、エラーが出てしまいました。どうしてダメだったんでしょうか。。わかる方がいらっしゃればご教示くださると嬉しいです:pray:
endの場所をputs ~の後ろにしていたせいで、出力がミスってました。気をつけよう!

参考文献

Arrayクラス

Array#each (Ruby 3.0.0 リファレンスマニュアル)

Atcoder Beginners SelectionをRubyで解いてみた - Kasasagi's memorandum

[AtCoder]ABC081B - Shift only [Ruby]

1
0
8

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0