質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

4048閲覧

「7以上7777777以下の7の倍数を全て書き出したとき、数字「7」は何回現れるか」をRuby記法で出力したい

horihorihori

総合スコア2

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2022/09/28 00:35

問題

7以上7777777以下の7の倍数を全て書き出したとき、数字「7」は何回現れるかをRubyを使って出力したいです。
こちらの正解は777784のようですが、下記の記述だと579671になってしまいます。
おそらく「77」や「777」を「2」「3」とカウントせずに「1」とカウントしているためだと思います。

該当のソースコード

ruby

1def create_number(number) 2 number_list = [] 3 for i in 1.upto(number) do 4 if (i % 7 == 0 ) 5 number_list.append(i) 6 end 7 end 8 return number_list.count{|i| i.to_s.include?("7")} 9 # return number_list 10end 11 12puts "#{create_number(7777777)}"

number_list.count{|i| i.to_s.include?("7")}で7のつく数字を数えていますが、
「77」や「777」を「2」「3」とカウントできるような記述があればご教授いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2022/09/28 00:43

return number_list.count{|i| i.to_s.include?("7")} => return number_list.to_s.count("7")
winterboum

2022/09/29 00:42

既に解決済みですが for i in 1.upto(number) do if (i % 7 == 0 ) は無駄いっぱいです。 (7..number).step(7).each do が良いでしょう
guest

回答2

0

ベストアンサー

「含まれる(include?)物を数える(count)」だと 579671 ですね。
「個数(count)を足す(sum)」だと、777784 number_list.sum{|i| i.to_s.count("7")}

投稿2022/09/28 01:21

編集2022/09/28 04:08
otn

総合スコア84489

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

horihorihori

2022/09/28 04:01

ありがとうございます。解決しました。
guest

0

String.countで文字列中に指定した文字が何回出現するかを数えられます。

String#count (Ruby 3.1 リファレンスマニュアル)

ruby

1p "7".count('7') #=> 1 2p "77".count('7') #=> 2 3p "777".count('7') #=> 3 4p "123".count('7') #=> 0 5p "71234567".count('7') #=> 2

投稿2022/09/28 00:43

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問