1128: 零基础学C/C++128——矩阵计算

题目描述

给定2个rc阶矩阵m1、m2以及若干运算符包括:+、-、、=,分别代表加(m1+m2)、减(m1-m2)、乘(m1*m2)、赋值(m1=m2)操作。计算矩阵的运算结果。其中1<=r,c<=10。

输入

输入数据有多组,第一行为测试数据的组数T,每组测试数据由2个矩阵(m1和m2)和若干个运算符组成。每个矩阵的第一行是矩阵的行、列数r,c。后面有r行,每行c个整数。
运算以end结束。我们假设所有的运算操作均可以进行

输出

赋值运算不输出任何结果,其他运行均输出每次运算的结果,且每次输出结果矩阵后再输出一个空行。

样例输入

1
3 3
1 0 0
0 1 0
0 0 1
3 3
1 2 3
1 2 3
1 2 3
-
*
=
+
end

样例输出

0 -2 -3
-1 -1 -3
-1 -2 -2

1 2 3
1 2 3
1 2 3

2 4 6
2 4 6
2 4 6

分析:

按照线性代数的知识 实际上这题在表达上有很大的的问题 这就造成了很大的疑惑
事实上 能够进行相加的矩阵实际上就是同型矩阵没问题
但是能够相乘的矩阵 两个r*c的矩阵 就是r=c的意思 不然无法进行矩阵乘法

代码实现:

事实上在多次尝试中 我的string类型的s用getline输入不管怎么样都是WA 但是getline换成cin输入就AC了
在这里插入图片描述

#include<iostream>
#include<cstring>
using namespace std;
int a[11][11],b[11][11],z[11][11];
void shuchu(int r,int c)
{
    int i,j;
    for(i=1;i<=r;i++)
    {
        for(j=1;j<=c-1;j++)
             cout<<z[i][j]<<" ";
        cout<<z[i][j]<<endl;
    }
    cout<<endl;
}
int main()
{
    // freopen("1.txt","r",stdin);
    // freopen("2.txt","w",stdout);
    int t,r,c,i,j,k;
    string s;
    while(cin>>t)
    {
        while(t--)
        {
            cin>>r>>c;
            for(i=1;i<=r;i++)
                for(j=1;j<=c;j++)
                    cin>>a[i][j];
            cin>>r>>c;
            for(i=1;i<=r;i++)
                for(j=1;j<=c;j++)
                    cin>>b[i][j];
            while(cin>>s)
            {
                if(s=="+")
                {
                    for(i=1;i<=r;i++)
                        for(j=1;j<=c;j++)
                            z[i][j]=a[i][j]+b[i][j];
                    shuchu(r,c);
                }
                if(s=="-")
                {
                    for(i=1;i<=r;i++)
                        for(j=1;j<=c;j++)
                            z[i][j]=a[i][j]-b[i][j];
                    shuchu(r,c);
                }
                if(s=="*")
                {
                    memset(z,0,sizeof(z));
                    for(i=1;i<=r;i++)
                        for(j=1;j<=c;j++)
                            for(k=1;k<=c;k++)
                                z[i][j]+=a[i][k]*b[k][j];
                    shuchu(r,c);
                }
                if(s=="=")
                    for(i=1;i<=r;i++)
                        for(j=1;j<=c;j++)
                            a[i][j]=b[i][j];
                if(s=="end")   break;
            }
        }
    }
    return 0;
}
发布了149 篇原创文章 · 获赞 14 · 访问量 8993

猜你喜欢

转载自blog.csdn.net/weixin_45485719/article/details/103572564