• C语言 · 矩阵乘法


    问题描述
      输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。
    输入格式
      第一行,空格隔开的三个正整数m,s,n(均不超过200)。
      接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。
      接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。
    输出格式
      m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。
    样例输入
    2 3 2
    1 0 -1
    1 1 -3
    0 3
    1 2
    3 1
    样例输出
    -3 2
    -8 2

    提示
    矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。
    例如样例中C(1,1)=(1,0,-1)*(0,1,3) = 1 * 0 +0*1+(-1)*3=-3
     
     
      编译器很诡异。之前一直非满分,因为数组规格太小,刚刚定义的m*s,s*n,m*n大小,题目要求:msn每个大小不超过200,索性直接将数组规模都改为了300——总之,规模要比预期的大一些才好。
     
     1 #include<stdio.h> 
     2 int main(){
     3     int m,s,n;
     4     /*输入m,s,n*/
     5     scanf("%d%d%d",&m,&s,&n);
     6     /*定义三个二维数组,并赋初值为0*/
     7     int A[300][300]={0},B[300][300]={0},C[300][300]={0};
     8     /*录入A[m][s]*/
     9     for(int i=0;i<m;i++){
    10         for(int j=0;j<s;j++){
    11             scanf("%d",&A[i][j]);
    12         }
    13     }
    14     /*录入B[s][n]*/
    15     for(int i=0;i<s;i++){
    16         for(int j=0;j<n;j++){
    17             scanf("%d",&B[i][j]);
    18         }
    19     }
    20     /*乘法计算,输出结果*/
    21     for(int i=0;i<m;i++)
    22         for(int j=0;j<n;j++)
    23             for(int z=0;z<s;z++){
    24                 C[i][j] += A[i][z]*B[z][j];
    25             }
    26             for(int i=0;i<m;i++){
    27                 for(int j=0;j<n;j++)
    28                     printf("%d ",C[i][j]);
    29                 printf("
    ");
    30             }
    31 }
  • 相关阅读:
    PMAC运动程序例程(一)
    【译】移动王国的诱惑【经济学人】
    粒子生物学【经济学人】
    快到家了【经济学人】
    关于贝加莱Modbus通讯的总结
    关于贝加莱Modbus通讯的总结
    移动王国的诱惑【经济学人】
    什么是Modbus
    动物精神【经济学人】
    什么是Modbus
  • 原文地址:https://www.cnblogs.com/panweiwei/p/6251115.html
Copyright © 2020-2023  润新知