1:1 + 2 + 3 + 4 + 5 = 15のように1 + 2 + 3 ・・・・・・+n の合計が知りたいとき
入力例15
出力例115
入力例2
10
出力例2
55
解答
n = gets.to_i
r = (1..n)
puts r.sum
# 55
こちらでもできる(-や*で引き算や掛け算もできる)
n = gets.to_i
r = (1..n)
puts r.inject(:+)
#55
2 与えられた整数の中にnの倍数がいくつあるか知りたいとき
-
入力例1 2 1 6 9 出力例1 1
解答 select { |i| i % n == 0 }で倍数がわかる
n = gets.to_i a = gets.split(' ').map(&:to_i).select { |i| i % n == 0 } puts a.length # 1
3 数列のn番目からm番目までの和を計算したい時
1行目に整数l,n,mが与えられます。
2行目に長さlの数列aryが与えられます。
数列のn番目からm番目までの和を計算し、出力してください
入力値
5 2 5 4 7 6 2 3
期待する出力
18
解答 ary[n – 1 .. m – 1]で数列の2番目と5番目の数(7,6,2,3)を取りsumで合計する。
l,n,m = gets.split(' ').map(&:to_i) ary = gets.split(' ').map(&:to_i) if n == m puts ary[n - 1] else puts ary[n - 1 .. m - 1].sum end # 18
4 等差数列について知りたいとき
5 15 25 35 45 55 65 75 85 95
最初の数字が5で、10ずつ増加しています。
一般的にこれを初項5、公差10の等差数列といいます。
初項mが与えられ、公差nが与えられるので20番目までの数字をスペース区切りで出力するプログラムを作成してください。
入力例
5 4
出力例
5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81
解答 m.step(by: n).take(20)でできる。
- 与えられる入力値は2つなので、変数2つに多重代入する。(a = 5, b=4)
- 等差数列には.stepを使ったほうが、短く書くことができる。
- .take(20)で配列の先頭から20個を配列として返して
- .join(‘ ‘)で半角スペース刻みで出力できます。
m, n = gets.split.map(&:to_i) puts m.step(by: n).take(20).join(" ")