基准时间限制: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\n",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\n",c[i][j]);
38             else printf("%d ",c[i][j]);
39         }
40     }
41     return 0;
42 }

 

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

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

HDU 4920.Matrix multiplication-矩阵乘法

太菜啦(ಥ_ಥ)

快点想明白啊。。。