演算法提高 矩陣相乘
阿新 • • 發佈:2018-12-30
問題描述
小明最近在為線性代數而頭疼,線性代數確實很抽象(也很無聊),可惜他的老師正在講這矩陣乘法這一段內容。
當然,小明上課打瞌睡也沒問題,但線性代數的習題可是很可怕的。
小明希望你來幫他完成這個任務。
現在給你一個ai行aj列的矩陣和一個bi行bj列的矩陣,
要你求出他們相乘的積(當然也是矩陣)。
(輸入資料保證aj=bi,不需要判斷) 輸入格式 輸入檔案共有ai+bi+2行,並且輸入的所有數為整數(long long範圍內)。
第1行:ai 和 aj
第2~ai+2行:矩陣a的所有元素
第ai+3行:bi 和 bj
第ai+3~ai+bi+3行:矩陣b的所有元素
輸出格式
輸出矩陣a和矩陣b的積(矩陣c)
(ai行bj列) 樣例輸入 2 2
12 23
45 56
2 2
78 89
45 56 樣例輸出 1971 2356
6030 7141
當然,小明上課打瞌睡也沒問題,但線性代數的習題可是很可怕的。
小明希望你來幫他完成這個任務。
現在給你一個ai行aj列的矩陣和一個bi行bj列的矩陣,
要你求出他們相乘的積(當然也是矩陣)。
(輸入資料保證aj=bi,不需要判斷) 輸入格式 輸入檔案共有ai+bi+2行,並且輸入的所有數為整數(long long範圍內)。
第1行:ai 和 aj
第2~ai+2行:矩陣a的所有元素
第ai+3行:bi 和 bj
第ai+3~ai+bi+3行:矩陣b的所有元素
(ai行bj列) 樣例輸入 2 2
12 23
45 56
2 2
78 89
45 56 樣例輸出 1971 2356
6030 7141
#include<stdio.h> int main() { long long int a,b,c,d,i,j,k; long long int arr1[1000][1000],arr2[1000][1000],s[1000][1000]={0}; scanf("%lld%lld",&a,&b); for(i=0;i<a;i++) { for(j=0;j<b;j++) { scanf("%lld",&arr1[i][j]); } } scanf("%lld%lld",&c,&d); for(i=0;i<c;i++) { for(j=0;j<d;j++) { scanf("%lld",&arr2[i][j]); } } for(i=0;i<a;i++) { for(j=0;j<b;j++) { for(k=0;k<d;k++) { s[i][k]+=arr1[i][j]*arr2[j][k]; } } } for(i=0;i<a;i++) { for(j=0;j<d;j++) { printf("%lld ",s[i][j]); } printf("\n"); } return 0; }