算法提高 矩陣相乘 時間限制:1.0s 內存限制:256.0MB 提交此題 問題描述 小明最近在為線性代數而頭疼,線性代數確實很抽象(也很無聊),可惜他的老師正在講這矩陣乘法這一段內容。 當然,小明上課打瞌睡也沒問題,但線性代數的習題可是很可怕的。 小明希望你來幫他完成這個任務。
現在給你一個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) ?。╝i行bj列) 樣例輸入 2 2 12 23 45 56 2 2 78 89 45 56 樣例輸出 1971 2356 6030 7141
#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>#include <queue>#include <cmath>#include <stdlib.h>#include <map>using namespace std;long long a[105][105];//矩陣1long long b[105][105];//矩陣2long long c[105][105];//結果矩陣void in(long long n,long long m,long long (&x)[105][105])//函數調用數組輸入{ for(long long i=0;i<n;i++) for(long long j=0;j<m;j++) cin>>x[i][j];}void sout(long long n,long long m,long long l)//矩陣相乘并輸出{ memset(c,0,sizeof(c)); for(long long i=0;i<n;i++) { for(long long k=0;k<l;k++) for(long long j=0;j<m;j++) { c[i][k]+=a[i][j]*b[j][k]; } } for(long long i=0;i<n;i++) { for(long long j=0;j<l;j++) { cout<<c[i][j]<<' '; } cout<<endl; }} int main(){ long long n,m,l; while(cin>>n>>m) { in(n,m,a); cin>>m>>l; in(m,l,b); sout(n,m,l); }}新聞熱點
疑難解答