※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。
詳しくはコチラ
なるべくわかりやすい解説を付けました。
問題1
実数 N、自然数 M が入力されます。N を丸めて小数第 M 位まで出力してください。
また、N の小数部が小数第 M 位に満たない場合は 0 で埋めて出力してください。
なお、小数第 M 位が 5 になることはありません。
自然な丸め処理を行って出力すると正解になります。
入力例 0.813 4 出力例4 0.8130
解答
n,m = gets.split(' ').map(&:to_f)
# 小数点以下の桁数を指定しています
printf("%.#{m.to_i}f", n)
問題2 複数の実数を出力 (paizaランク C 相当)
自然数 Q が与えられます。Q 回以下の問題に答えてください。
実数 N、自然数 M が入力されます。N を丸めて小数第 M 位まで出力してください。また、N の小数部が小数第 M 位に満たない場合は 0 で埋めて出力してください。
なお、小数第 M 位が 5 になることはありません。
自然な丸め処理を行って出力すると正解になります。
入力例1
4 0.813 1 0.813 2 0.813 3 0.813 4
出力例1
- 
0.8 0.81 0.813 0.8130 
問題3 直角三角形の出力
自然数 N が与えられます。1 ≦ i ≦ N の各 i について、i 行目には以下の数列を出力してください。* 1 以上 i 以下の数値をすべて、半角スペース区切りで出力してください
- 入力例1
- 
4出力例1 
- 
1 1 2 1 2 3 1 2 3 4 
解答
- 
入力Nを代入
- 
配列[1, 2, 3, 4]を作る
- 
timesで繰り返し処理をする
- 
a.takeを使うことで配列をiずつ取り出して半角スペースを間に入れて出力する
n = gets.to_i
a = *(1..n)
1..n.times do |i|
  puts a.take(a[i]).join(' ')
end
問題4 すべての行の長さが不定な 2 次元配列の出力
自然数NとN個の要素の数列Mが与えられます。
1 ≦ i ≦ N の各 i について、i 行目には以下の数列を出力してください。
1 以上 M_i 以下のすべての自然数を昇順、半角スペース区切りで出力してください。
入力例1
4 2 4 3 1
出力例1
1 2 1 2 3 4 1 2 3 1
入力例2
1 1
出力例2
1
解答 入力例1で解説
- 
入力Nを受け取る
- 
数列Mを受け取る
- 
N回繰り返す
- 
mの配列の数字−1回繰り返し(m[0]のときは2−1で1回)、1から初めて
- 
繰り返しが終わったら、mの配列を加える1 2
- 
2回目は(m[1]なので4−1で3回繰り返し)1 2 3までやったら
- 
puts m[i]で1 2 3 4が出力されて
- 
以下繰り返していく
n = gets.to_i
m = gets.split(' ').map(&:to_i)
n.times do |i|
# ここで先に1,2,3,とやってから
  (m[i]-1).times { |j| print "#{j +1 } "}
# 最後にmの配列を足す
  puts m[i]
end
					