矩阵操作(数组)
题目描述
给定一个N阶初始矩阵,现有以下操作
TRANSLATE: 转置,即将aij变为aji,操作结束后输出矩阵
ADD: 将该矩阵与一矩阵相加得到一新矩阵,操作结束后输出这一新矩阵
MULTIPLY: 与该矩阵与一矩阵相乘得到一新矩阵,操作结束后输出这一新矩阵
(此处不懂矩阵乘法请自行百度)
SUM:输出两条对角线上元素之和(不重复计算)
输入
测试数据只有一组
输入的第一行给出一个整数N(1 <= N <= 5),代表矩阵的阶数
下N行代表这一矩阵,其数值都是整数
其后的每一行都是操作,数据保证输入合法
操作以 OVER 结束
输出
具体输出见样例
样例输入
2
1 0
0 1
TRANSLATE
ADD
1 0
0 1
ADD
2 0
0 2
MULTIPLY
1 2
3 4
SUM
OVER
样例输出
1 0
0 1
2 0
0 2
4 0
0 4
4 8
12 16
40
提示
#include<bits/stdc++.h>
using namespace std;
void ts(int a[][100],int n);
void add(int a[][100],int n);
void mu(int a[][100],int n);
void su(int a[][100],int n);
int main()
{
int n,i,j,a[100][100];
char s[20];
cin>>n;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cin>>a[i][j];
}
}
while(cin>>s)
{
if(s[0]=='T')
ts(a,n);
else if(s[0]=='A')
add(a,n);
else if(s[0]=='M')
mu(a,n);
else if(s[0]=='S')
su(a,n);
else if(s[0]=='O')
break;
}
}
void ts(int a[][100],int n)
{
int i,j,c[100][100];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
c[i][j]=a[j][i];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=c[i][j];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(j!=n-1)
cout<<a[i][j]<<" ";
else
cout<<a[i][j]<<"\n";
}
}
}
void add(int a[][100],int n)
{
int i,j,c;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cin>>c;
a[i][j]+=c;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(j!=n-1)
cout<<a[i][j]<<" ";
else
cout<<a[i][j]<<"\n";
}
}
}
void mu(int a[][100],int n)
{
int i,j,k,sum,b[100][100],c[100][100];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cin>>b[i][j];
c[i][j]=a[i][j];
}
}
for(i=0;i<n;i++)
{
for(k=0;k<n;k++)
{
sum=0;
for(j=0;j<n;j++)
{
sum+=c[i][j]*b[j][k];
}
a[i][k]=sum;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(j!=n-1)
cout<<a[i][j]<<" ";
else
cout<<a[i][j]<<"\n";
}
}
}
void su(int a[][100],int n)
{
int i,j,s;
s=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(j==i)
s+=a[i][j];
else if(j==n-1-i)
s+=a[i][j];
}
}
cout<<s<<"\n";
}
思考
乘法是难点
N阶矩阵的加法,A矩阵第i行的第j(1,2,3…)和B矩阵的第j(1,2,3…)行的第k列分别相乘相加后为结果的第i行,第k列;其中i是最外层循环,k是第二层,j是最里层。
行和列相同的矩阵即可使用这个乘法,但是如果列和行不同,结果的列会按照B的列。
设A为的矩阵,B为的矩阵,那么称的矩阵C为矩阵A与B的乘积,记作 ,其中矩阵C中的第行i第k列元素可以表示为,如下:
注意事项
编辑
1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。