月別アーカイブ: 2021年1月

標準入力(レベルアップ問題)

問題6 n回文字列表示して改行区切りする

期待する出力
n 回 suzutuki と改行区切りで出力してください。

suzutuki
...
suzutuki
入力例1
2
出力例1
suzutuki
suzutuki

 

解答どちらでもOK

e = gets.to_i
puts "suzutuki\n" * e
n = gets.to_i

n.times { puts 'suzutuki' }

問題5 最初のnを省く

整数 n と n 個の整数 a_1, …, a_n が改行区切りで与えられるので、
a_1, …, a_n を与えられた順に、改行区切りで出力してください。

入力される値
入力は以下のフォーマットで与えられます。

n
a_1
...
a_n

1 行目には整数 n が与えられ、2 行目から (n+1) 行目にかけては n 個の整数 a_1, …, a_n が改行区切りで与えられます。入力値最終行の末尾に改行が1つ入ります。文字列は標準入力から渡されます

期待する出力
a_1, …, a_n を入力された順に改行区切りで出力してください。

a_1
...
a_n

入力例1

2
1
2
出力例1
1
2

解答1 popで最初を省く

e = readlines.map(&:to_i)
c = e.length
puts e.pop(c-1)

解答2 繰り返し処理でやる

n = gets.to_i
n.times do
  a = gets.to_i
  puts a
end
  • 繰り返します。
  • n.times doend の間に今回は a = gets.to_i を書きます。これにより n 行の入力を受け取ることになります。
  • 文字列として a を出力しても正解になりますが、整数として入力されるので、to_i メソッドを使って変換を行っています。

問題6  a_1, …, a_n で最大値を表示.max

n
a_1
...
a_n

1 行目には整数 n が与えられ、 2 行目から (n + 1) 行目にかけては n 個の整数 a_1, …, a_n が改行区切りで与えられます。

期待する出力
a_1, …, a_n の中で最も大きい数を出力してください。
条件
すべてのテストケースにおいて、以下の条件をみたします。
・1 ≦ n ≦ 50・各 a_i(1 ≦ i ≦ n)について 1 ≦ a_i ≦ 50
入力例1
2
4
7
出力例1
7

解答

n = readlines.map(&:to_i)
puts n.max

別解

n = gets.to_i
arr = Array.new(n)
n.times { |i| arr[i] = gets.to_i }
puts arr.max
  • Ruby では arr = Array.new(n) と書くことで長さ n の配列 arr を用意することができます。
  • ブロックの冒頭に |i| と書くと、「いま何回目のループか」が i に順々に代入されます。初回は 0 回目なので注意して下さい。
  • arr のインデックス i の要素に値 x を代入するには arr[i] = x のように書きます。
  • 今回は入力値を整数に変換して代入したいので a[i] = gets.to_i と書きます。
  • 配列内の最大値は arr.max() のように書くと取得することができます。

 

入力される値
入力は以下のフォーマットで与えられます。

n

1行目に整数nが与えられます。

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
suzutuki と n 回、半角スペース区切りで出力してください。最後の suzutuki の後には半角スペースは入れず、改行を入れ、余計な文字、空行を含んではいけません。

suzutuki suzutuki ... suzutuki

条件
すべてのテストケースにおいて、以下の条件をみたします。

・1 ≦ n ≦ 50

入力例1

2

出力例1

suzutuki suzutuki

入力例2

3

出力例2

suzutuki suzutuki suzutuki

解答

最後の半角スペースを取り除くには.chopを使う

e = gets.to_i
f = "suzutuki " * e
puts f.chop

別解

n = gets.to_i
ans = 'suzutuki'
(n - 1).times { ans += ' suzutuki' }

puts ans
  • 方針の通り実装しています。
  • まず ans = 'suzutuki' で ans を初期値 'suzutuki' で用意します。
  • その後、ans += ' suzutuki' を n-1 回繰り返す繰り返し処理を書けばよいです。
  • 上記から分かるように Ruby では文字列の連結を + 演算子を使って行うことができます。

解答例 2

n = gets.to_i
arr = Array.new(n)
n.times { |i| arr[i] = 'suzutuki' }

puts arr.join(' ')
  • Array クラスの join メソッドを使う方法です。
  • join メソッドは arr.join(' ') のように使います。この場合の返り値は arr の要素間に ' ' を挟んだ文字列です。

問題

整数 n が与えられ、その後に n 個の整数 a_1, …, a_n が半角スペース区切りで与えられるので、a_1, …, a_n をそのままの順番で改行区切りで出力してください。

入力される値
入力は以下のフォーマットで与えられます。

n
a_1 a_2 ... a_n

1 行目には整数 n が与えられ、2 行目には半角スペース区切りの n 個の数 a_1, …, a_n が 1 行で与えられます。

期待する出力
a_1, …, a_n をそのままの順番で改行区切りで出力してください。

a_1
...
a_n
入力例1
2
1 5
出力例1
1
5
入力例2
3
4 30 12
出力例2
4
30
12

解答

#"4 30 12"
gets
#pの場合p gets.split.map(&:to_i)数値にちゃんとする
puts gets.split

別解

n = gets.to_i

a = gets.split(' ').map(&:to_i)
a.each { |num| puts num }

  • gets.split(' ').map(&:to_i) とすることで 1 行の入力を半角スペースで区切り、すべての要素を整数に変換して配列で受け取ることができます。
  • 配列.each do |変数| のように書くと 配列 の各要素が 変数 に代入され、繰り返し処理が行われます。

解答例 2

n = gets.to_i

a = gets.split(' ').map(&:to_i)
puts a
  • puts 配列 のように書くと 配列 の各要素を改行区切りで出力することができます。

問題

10
813
100

と入力されるので、↓のように出力してください。

10-813-100

解答

a = gets.chomp
b = gets.chomp
c = gets.chomp
puts a + "-" + b + "-" + c

別解

line = readlines.map(&:to_s)
puts line[0].chomp + "-" + line[1].chomp + "-" + line[2]

別解2

line = readlines.map(&:chomp)
puts line[0] + "-" + line[1] + "-" + line[2]

別解3 これが一番良い(joinで任意の文字を足してつなげる)

line = readlines.map(&:chomp)
puts line.join('-')