#問題
入力された行列の転置行列を求めよ
※こちらのサイトから引用
#解答
transposed_matrix.rb
# 受け取った行列を表示するメソッド
def show_matrix(matrix)
matrix.length.times do |col|
matrix[0].length.times do |row|
print format('%2d ', matrix[col][row])
end
print "\n"
end
end
# 入力行列の列数
MATRIX_COL = 3
# 入力行列の行数
MATRIX_ROW = 3
# 入力となる行列の宣言
t_matrix = Array.new(MATRIX_ROW).map{ Array.new(MATRIX_COL) }
# 値のセット
# 練習も兼ねてランダムにセット
# 値は1〜20までの整数値
t_matrix.length.times do |col|
t_matrix[0].length.times do |row|
# rand(1..20)で1〜20の範囲で乱数を生成っていう意味
t_matrix[col][row] = rand(1..20)
end
end
# 入力した行列の表示
puts "入力した行列を表示します"
show_matrix(t_matrix)
# 転置行列を求める
puts "転置行列を求めます"
# 列は0番目から始めて(列の長さ - 2)回繰り返す
(0..(t_matrix.length-2)).each do |col|
# 行は(currentの列 + 1)番目から始めて(行の長さ-1)まで繰り返す
(1..(t_matrix.length-1)).each do |row|
# 配列の中身を入れ替え
t_matrix[col][row], t_matrix[row][col] = t_matrix[row][col], t_matrix[col][row]
end
end
#転置行列を表示
puts "転置行列を表示します"
show_matrix(t_matrix)
#結果
入力した行列を表示します
3 9 5
16 10 2
15 7 15
転置行列を求めます
転置行列を表示します
3 16 15
9 10 7
5 2 15
#追記
Array#transpose
を使うと
楽に転置行列を求められることを教えていただきました。(コメント参照)
今回は練習を兼ねて自力で解いてみました。