51nod 1137.矩阵乘法-矩阵乘法
给出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-矩阵乘法太菜啦(ಥ_ಥ)
快点想明白啊。。。