今回はpaiza 標準入力メニューセクション8(小数点数の入力)を解説します。
セクション8は、1行目で要素数nが与えられ、続くn行の文字列を受け取り小数点数に変換して受け取る問題と、1行目または1要素目で要素数nが与えられ、半角スペース区切りの文字列を小数点数に変換して受け取る問題です。
本記事で使用しているメソッドについて
解答例で使っているメソッドについて、下記の記事で詳しく解説していますので参考にしてみて下さい。
- [Ruby] 標準入力によるデータ取得1
- [Ruby] 標準入力によるデータ取得2
- [Ruby] 標準入力によるデータ取得3
- [Ruby] 標準出力(データを任意に整形して出力する)
- [Ruby]配列の基本操作1
- [Ruby]繰り返し処理
セクション8:1 行目で与えられる N 個の実数の入力 (large)
8-STEP1: 改行区切りでの N 個の文字列の入力 (paizaランク D 相当)
1行目でデータ数nが与えられ、続くn行の入力データを浮動小数点数に変換して受け取り、データの先頭から順に出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 5 0.813 8.13 81.3 813 8138 EOS OUTPUT1 = <<~"EOS" 0.813 8.13 81.3 813 8138 EOS
Ruby解答例
まず、1行目の入力を受け取り、整数に変換し変数nに格納します。
次に、n.times
でn回のループを設定し、.map{ gets.to_f }
で入力データを浮動小数点型に変換した配列を、配列aryに格納します。
# 解答例 # 1 行目入力 n = gets.to_i # 続く n 行入力 ary = n.times.map { gets.to_f } # 出力 puts(ary)
Python解答例
# 解答例 # 1 行目入力 n = int(input()) # 続く n 行入力 ary = [float(input()) for _ in range(n)] # 出力 [print(f) for f in ary]
8-STEP2: 2 行目で与えられる N 個の実数の入力 (paizaランク D 相当)
1行目で要素数nが与えられ、2行目のn個の文字列を半角スペースで分割、浮動小数点型に変換して受け取り、先頭から順に改行区切りで出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 5 0.813 8.13 8 1.83 3.81 EOS OUTPUT1 = <<~"EOS" 0.813 8.13 8 1.83 3.81 EOS
Ruby解答例1
1行目で要素数nが与えられ、2行目の文字列を半角スペースで分割、浮動小数点型に変換して配列aryへ格納しています。
# 解答例 # 1 行目入力 n = gets.to_i # 2 行目入力 ary = gets.split.map(&:to_f) # 出力 puts(ary)
Python解答例
# 解答例 # 1 行目入力 n = int(input()) # 2 行目入力 ary = [*map(float, input().split())] # 出力 [print(f) for f in ary]
8-STEP3: 1 行目で与えられる N 個の実数の入力 (paizaランク D 相当)
1行の半角スペース区切りでデータが与えられ、1個目の要素を要素数n、2個目以降の文字列データを浮動小数点数に変換して受け取り、先頭から順に出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 5 8.13 81.3 813 0.813 1.381 EOS OUTPUT1 = <<~"EOS" 8.13 81.3 813 0.813 1.381 EOS
Ruby解答例1
半角スペースで分割した文字列の2個目以降の要素を浮動小数点数に変換して 配列ary へ格納しています。
# 解答例1 # 入力 ary = gets.split[1..].map(&:to_f) # 出力 puts(ary)
Ruby解答例2
1個目の要素は使いませんが、整数型で受け取る場合、次のようになります。
# 解答例2 # 入力 n, *ary = gets.split # n を整数型に変換 n = n.to_i # aryの各要素を浮動小数点型に変換 ary.map!(&:to_f) # 出力 puts(ary)
Python解答例
# 解答例 # 入力 ary = [*map(float, input().split()[1:])] # 出力 [print(f) for f in ary]
8-STEP4: 2 行目で与えられる N 個の実数の入力 (large) (paizaランク D 相当)
1行目で要素数nが与えられ、2行目のn個の文字列を半角スペースで分割、浮動小数点数に変換して受け取り、先頭から順に改行区切りで出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 5 0.813 8.13 8 1.83 3.81 EOS OUTPUT1 = <<~"EOS" 0.813 8.13 8 1.83 3.81 EOS
Ruby解答例1
8-STEP2 と同じコードです。
# 解答例 # 1 行目入力 n = gets.to_i # 2 行目入力 ary = gets.split.map(&:to_f) # 出力 puts(ary)
Python解答例
# 解答例 # 1 行目入力 n = int(input()) # 2 行目入力 ary = [*map(float, input().split())] # 出力 [print(f) for f in ary]
8-FINAL: 1 行目で与えられる N 個の実数の入力 (large) (paizaランク D 相当)
1行の半角スペース区切りでデータが与えられ、1個目の要素を要素数n、2個目以降を浮動小数点数に変換して受け取り、先頭から順に出力する問題です。
入出力例
# 入出力例 INPUT1 = <<~"EOS" 5 8.13 81.3 813 0.813 1.381 EOS OUTPUT1 = <<~"EOS" 8.13 81.3 813 0.813 1.381 EOS
Ruby解答例1
8-STEP3 解答例1と同じコードです。
# 解答例1 # 入力 ary = gets.split[1..].map(&:to_f) # 出力 puts(ary)
Ruby解答例2
8-STEP3 解答例2と同じコードです。
# 解答例2 # 入力 n, *ary = gets.split # n を整数型に変換 n = n.to_i # aryの各要素を浮動小数点型に変換 ary.map!(&:to_f) # 出力 puts(ary)
Python解答例
# 解答例 # 入力 ary = [*map(float, input().split()[1:])] # 出力 [print(f) for f in ary]
今回のまとめ
- 1行目で入力行数n、続くn行で入力データが与えられる場合
- 1行目の入力行数nを整数型で受け取り、n回のループで続くn行の入力をto_fメソッドで浮動小数点数に変換して受け取る
- 半角スペース区切りのデータが与えられ、1個目の要素に要素数nが与えられた場合
ary = gets.split[1..].map(&:to_f)
で2個目以降の要素を浮動小数点数に変換して受け取るn, *ary = gets.split
で1個目の要素と、2個目以降の要素を受け取った後、ary.map!(&:to_f)
で配列aryの要素を浮動小数点型に変換する
浮動小数点数への変換はto_fメソッドを使うということだけ覚えておけば、今まで通りの方法でデータを受け取ることが出来ました。
次のセクション9は「数値と数値」・「文字列と数値」などの対になるデータの受け取りです!