【链接】nbu1204点击打开链接
【题目】
矩阵乘法
Time Limit:1000MS Memory Limit:65536K
Description
给定两个矩阵,求出它们的积
Input
多组数据
每组首先给出n1,n2,n3
代表两个矩阵的维数分别为n1*n2,n2*n3
然后先是n1行n2列数字,代表A矩阵,再是n2行n3列数字,代表B矩阵.
Output
输出得到的矩阵,一行内的数字用空格分开.
Sample Input
3 3 3
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
Sample Output
3 3 3
3 3 3
3 3 3
Hint
use c#input&&output
【算法】
这个题目测试数据有问题,导致PE了好久,首先它最后一个是有空格的,然后测试数据里边有n3==0的情况,PE版的这种情况下就会没输出,应该要输出回车的。
【代码】
1.PE
#include<stdio.h>
int a[1000+10][1000+10],b[1000+10][1000+10];
int main()
{
int n1,n2,n3,i,j,k,s;
while(scanf("%d%d%d",&n1,&n2,&n3)!=EOF)
{
for(i=0;i<n1;i++)
{
for(j=0;j<n2;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<n2;i++)
{
for(j=0;j<n3;j++)
scanf("%d",&b[i][j]);
}
for(i=0;i<n1;i++)
{
for(j=0;j<n3;j++)
{
s=0;
for(k=0;k<n2;k++)
s+=a[i][k]*b[k][j];
printf("%d",s);
if(j==n3-1) printf("\n");
else printf(" ");
}
}
}
return 0;
}
2.AC
#include<stdio.h>
int a[1000+10][1000+10],b[1000+10][1000+10];
int main()
{
int n1,n2,n3,i,j,k,s;
while(scanf("%d%d%d",&n1,&n2,&n3)!=EOF)
{
for(i=0;i<n1;i++)
{
for(j=0;j<n2;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<n2;i++)
{
for(j=0;j<n3;j++)
scanf("%d",&b[i][j]);
}
for(i=0;i<n1;i++)
{
for(j=0;j<n3;j++)
{
s=0;
for(k=0;k<n2;k++)
s+=a[i][k]*b[k][j];
printf("%d ",s);
}
printf("\n");
}
}
return 0;
}