L1-048矩陣A乘以B

給定兩個矩陣A和B,要求你計算它們的乘積矩陣AB。需要注意的是,只有規模匹配的矩陣纔可以相乘。即若A有Ra行、Ca列,B有Rb行、Cb列,則只有Ca與Rb相等時,兩個矩陣才能相乘。

輸入格式:

輸入先後給出兩個矩陣A和B。對於每個矩陣,首先在一行中給出其行數R和列數C,隨後R行,每行給出C個整數,以1個空格分隔,且行首尾沒有多餘的空格。輸入保證兩個矩陣的R和C都是正數,並且所有整數的絕對值不超過100。

輸出格式:

若輸入的兩個矩陣的規模是匹配的,則按照輸入的格式輸出乘積矩陣AB,否則輸出Error: Ca != Rb,其中Ca是A的列數,Rb是B的行數。

輸入樣例1:

2 3
1 2 3
4 5 6
3 4
7 8 9 0
-1 -2 -3 -4
5 6 7 8

輸出樣例1:

2 4
20 22 24 16
53 58 63 28  

輸入樣例2:

3 2
38 26
43 -5
0 17
3 2
-11 57
99 68
81 72   

輸出樣例2:

Error: 2 != 3

題目思路:

一開始,一看題目。嗯!沒有思路。。。

什麼是矩陣乘法呢?(此處可以百度瞭解以下)

在這裏插入圖片描述

簡單地說就是上述公式。百度詞條中這樣定義:
在這裏插入圖片描述

看完之後,我們就或許有了一點思路。

於是如果符合條件,我們就依次計算輸出即可。

但是!!!

這道題最最關鍵的就是各種不同的自定義字母所代表的含義。(比如上圖中的是b [1 ] [1] 其實在數組中是b [0] [0];謹慎呀!!!(找這個bug找的腦殼疼)

當然,也可以動態數組,但是這樣更好理解一一些。

#include<bits/stdc++.h>
using namespace std;
int main(){

	int c1,c2,r1,r2; 
	int i,j;
	cin>>r1>>c1;	
	int m[r1][c1];//定義並得到兩個數組 
	for(i=0;i<r1;i++)
	{
		for( j=0;j<c1;j++)
		{
			cin>>m[i][j];
		}
	}	
	cin>>r2>>c2;	
	int n[r2][c2];
	for(i=0;i<r2;i++)
	{
		for( j=0;j<c2;j++)
		{
			cin>>n[i][j];
		}
	}
	if(c1==r2)
	{//首先排除不相等的情況 (規模是否相等) 
		cout<<r1<<" "<<c2<<endl;
		for(i=0;i<r1;i++){//前兩個for得到n個item; 
			for(j=0;j<c2;j++)
			{//輸出每一行; 
				int sum=0;
				for(int k=0;k<c1;k++){//(見公式); 
				sum=sum+m[i][k]*n[k][j];
			}
			cout<<sum;
			if(j!=c2-1)
			  cout<<" ";
		}
		cout<<endl;
	}
	}
	
	else cout<<"Error: "<<c2<<" != "<<r2;

	return 0;	
}
發佈了24 篇原創文章 · 獲贊 7 · 訪問量 6827
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章