zoukankan      html  css  js  c++  java
  • 51nod 1137.矩阵乘法-矩阵乘法

    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
     
    给出2个N * N的矩阵M1和M2,输出2个矩阵相乘后的结果。
     
    Input
    第1行:1个数N,表示矩阵的大小(2 <= N <= 100)
    第2 - N + 1行,每行N个数,对应M1的1行(0 <= M1[i] <= 1000)
    第N + 2 - 2N + 1行,每行N个数,对应M2的1行(0 <= M2[i] <= 1000)
    Output
    输出共N行,每行N个数,对应M1 * M2的结果的一行。
    Input示例
    2
    1 0
    0 1
    0 1
    1 0
    Output示例
    0 1
    1 0



    代码1:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cstdlib>
     6 #include<string.h>
     7 #include<set>
     8 #include<vector>
     9 #include<queue>
    10 #include<stack>
    11 #include<map>
    12 #include<cmath>
    13 using namespace std;
    14 const int N=1000+10;
    15 int a[N][N],b[N][N],c[N][N];
    16 int main(){
    17     int n;
    18     while(~scanf("%d",&n)){
    19         for(int i=0;i<n;i++)
    20         for(int j=0;j<n;j++){
    21             scanf("%d",&a[i][j]);
    22             c[i][j]=0;
    23         }
    24         for(int i=0;i<n;i++)
    25         for(int j=0;j<n;j++){
    26             scanf("%d",&b[i][j]);
    27         }
    28         for(int i=0;i<n;i++)
    29         for(int j=0;j<n;j++){
    30             if(!a[i][j])continue;
    31             for(int k=0;k<n;k++)
    32                 c[i][k]=c[i][k]+a[i][j]*b[j][k];
    33         }
    34         for(int i=0;i<n;i++)
    35         for(int j=0;j<n;j++){
    36             if(j==n-1)printf("%d
    ",c[i][j]);
    37             else printf("%d ",c[i][j]);
    38         }
    39     }
    40     return 0;
    41 }

    代码2:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cstdlib>
     6 #include<string.h>
     7 #include<set>
     8 #include<vector>
     9 #include<queue>
    10 #include<stack>
    11 #include<map>
    12 #include<cmath>
    13 using namespace std;
    14 const int N=1000+10;
    15 int a[N][N],b[N][N],c[N][N];
    16 int main(){
    17     int n;
    18     while(~scanf("%d",&n)){
    19         for(int i=0;i<n;i++)
    20         for(int j=0;j<n;j++){
    21             scanf("%d",&a[i][j]);
    22             c[i][j]=0;
    23         }
    24         for(int i=0;i<n;i++)
    25         for(int j=0;j<n;j++){
    26             scanf("%d",&b[i][j]);
    27         }
    28         for(int i=0;i<n;i++)
    29         for(int j=0;j<n;j++){
    30             for(int k=0;k<n;k++){
    31                 if(!a[i][k])continue;
    32                 c[i][j]=c[i][j]+a[i][k]*b[k][j];
    33             }
    34         }
    35         for(int i=0;i<n;i++)
    36         for(int j=0;j<n;j++){
    37             if(j==n-1)printf("%d
    ",c[i][j]);
    38             else printf("%d ",c[i][j]);
    39         }
    40     }
    41     return 0;
    42 }

    51nod的这道题可能数据比较水吧,两种循环哪个都可以过。。。

     具体可参考以前的博客,谁会教教我。

    HDU 4920.Matrix multiplication-矩阵乘法

    太菜啦(ಥ_ಥ)

    快点想明白啊。。。

  • 相关阅读:
    使用paramikoHelper类实现MySQL安装和数据恢复
    tornado-模板,转义,上传静态文件
    tornado-请求与响应
    tornado-输入
    tornado-输出,request
    配置Ubuntu虚拟环境
    tornado-简单的服务器非阻塞
    Linux查看进程,端口,访问url
    tornado-简单的服务器
    字符串,数组,定时器,form
  • 原文地址:https://www.cnblogs.com/ZERO-/p/9695359.html
Copyright © 2011-2022 走看看