Rubyを使ったロジックについて学習しています。
数字に関するお題について、回答し、ロジックを分解して考えていきます。
問題
7777777以下の7の倍数を全て取り出したとき、数字「7」は何回現れるか?
回答コード
def count_number(number)
list = []
for i in 1.upto(number) do
if (i % 7 == 0 )
list.append(i)
end
end
list.sum{|i| i.to_s.count("7")}
end
puts "#{count_number(7777777)}"
出力結果
777784
コードの解説
- このコードは、
1から指定した数値までの中で、7の倍数の数値の中に7が何回現れるかをカウント
するコードである。 - まず、
count_number(number)
っていう関数を定義している。引数には数値が渡されることを期待している。 - 次に、
list = []
で空の配列を作成している。これは後で7の倍数の数値を格納するための配列である。 - その後、
for i in 1.upto(number) do
のループで1から指定した数値までをチェックしている。 -
i % 7 == 0
の部分で、その数値が7の倍数かどうかを判断している。もし7の倍数だったら、list.append(i)
でその数値を配列に追加している。 - ループが終わったら、
list.sum{|i| i.to_s.count("7")}
で配列の中の数値を文字列に変換し、その中に7が何回現れるかをカウントして全て足している。 -
i.to_s.count("7")
の部分で、数値を文字列に変換して7の数をカウントしている。 - 最後に、
puts "#{count_number(7777777)}"
で関数を呼び出し、結果を出力している。 - コードを実行すると、
1から7777777までの中で7の倍数の数値の中に7が何回現れるかが表示
される。
参考記事