1. paizaラーニングトップ
  2. レベルアップ問題集
  3. 繰り返し二乗法・ダブリングメニュー(言語選択)
  4. 問題一覧 Ruby編
  5. 行列の積 Ruby編

繰り返し二乗法・ダブリングメニューのサムネイル
行列の積 Ruby編(paizaランク B 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

前問では、行列の和を計算しましたが、行列では積を計算することもできます。

行列 A と行列 B の積 AB の i 行目 j 列目の要素 {AB}_{ij} は次のように計算されます。

{AB}_{ij} = A_{i1}B_{1j} + A_{i2}B_{2j} + ... + A_{in}B_{nj}

つまり、{AB}_{ij} は A の i 行目の各要素と B の j 列目の各要素を掛けたものをすべて足し合わせたものです。

たとえば、次のような行列 A と行列 B があるとします。

A = [[1, 2], [3, 4]]
B = [[5, 6], [7, 8]]

このとき、AB は次のように計算されます。

{AB}_{11} = A_{11}B_{11} + A_{12}B_{21} = 1 × 5 + 2 × 7 = 19
{AB}_{12} = A_{11}B_{12} + A_{12}B_{22} = 1 × 6 + 2 × 8 = 22
{AB}_{21} = A_{21}B_{11} + A_{22}B_{21} = 3 × 5 + 4 × 7 = 43
{AB}_{22} = A_{21}B_{12} + A_{22}B_{22} = 3 × 6 + 4 × 8 = 50

したがって、AB は次のようになります。

AB = [[19, 22], [43, 50]]

行列 a と行列 b が与えられるので、行列 ab を計算してください。

入力される値

n
a_{11} a_{12} ... a_{1n}
a_{21} a_{22} ... a_{2n}
...
a_{n1} a_{n2} ... a_{nn}
b_{11} b_{12} ... b_{1n}
b_{21} b_{22} ... b_{2n}
...
b_{n1} b_{n2} ... b_{nn}


・ 1 行目に整数 n が与えられます。
・ 続く n 行には、行列 a の各行の要素が半角スペース区切りで与えられます。
・ 続く n 行には、行列 b の各行の要素が半角スペース区切りで与えられます。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

合計 n 行出力してください。
i 行目には、ab の i 行目の要素 {ab}_{i1}, {ab}_{i2}, ..., {ab}_{in} を半角スペース区切りで出力してください。

また、末尾に改行を入れ、余計な文字を含んではいけません。

条件

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

・ 入力はすべて整数
・ 1 ≦ n ≦ 100
・ 0 ≦ a_{ij}, b_{ij} ≦ 100 (1 ≦ i, j ≦ n)

入力例1

2
1 2
3 4
5 6
7 8

出力例1

19 22
43 50

入力例2

4
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1

出力例2

4 4 4 4
4 4 4 4
4 4 4 4
4 4 4 4

問題一覧へ戻る

ページの先頭へ戻る