C言語による行列の積です。
n×m の行列 A と m×l の行列 B から、それらの積である n×l の行列 C を出力するプログラムです。
・問題
n×m の行列 A と m×l の行列 B を入力し、それらの積である n×l の行列 C を出力するプログラムを作成してください。
行列 C の各要素 cij は次の式で得られます:
ここで、A、B、C の各要素をそれぞれ aij、bij、cij とします。
・入力される値
1行目に n、m、l が空白区切りで与えられます。
続く行に n×m の行列 A と m×l の行列 B が与えられます。
・期待する出力
n×l の行列 C の要素 cij を出力してください。
各行の隣り合う要素を1つの空白で区切ってください。
・条件
1≤n,m,l≤100
0≤aij,bij≤10000
僕が作成、提出したコードは、以下のとおりです。
/* ITP1_7_D : Matrix Multiplication http://judge.u-aizu.ac.jp/ C言語による行列の積 https://neguse-atama.hatenablog.com */ #include <stdio.h> int main(void){ int n,m,l; int i,j,k; int a[110][110],b[110][110]; long int c[110][110]={0}; scanf("%d %d %d",&n,&m,&l); for(i=0;i<n;i++){ for(j=0;j<m;j++){ scanf("%d",&a[i][j]); } } for(i=0;i<m;i++){ for(j=0;j<l;j++){ scanf("%d",&b[i][j]); } } for(i=0;i<n;i++){ for(j=0;j<l;j++){ for(k=0;k<m;k++){ c[i][j]+=a[i][k]*b[k][j]; } if(j!=0){ printf(" "); } printf("%ld",c[i][j]); } putchar('\n'); } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/
ITP1_7_D : Matrix Multiplication