Time/Memory Limit:1000 MS/32768 K
Submitted: 94
Accepted: 50
Problem Description
给出两个行列式A,B,将A转置后与B相加。规定:若A,B的行数或列数不相等时,视空缺的位置为0(见Hints)。
Input
每组第一行有四个整数n1,m1,n2,m2(0<n1,m1,n2,m2<100)。n1为A的行数,m1为A的列数,n2为B的行数,m2为B的列数。接下来分别有n1*m1个整数,和n2*m2个整数。
Output
每组输出将A转置后+B后得到的矩阵。每一行每两个数之间一个空格。(最终结果矩阵中的元素不会超过2^31)。
Sample Input
Sample Output
Hints
例如
1 2 3
4 5 6
转置后:
1 4
2 5
3 6
1 1 1 1 1 2 2 1
1 1 + 1 1 1 = 2 2 1
1 1 1 1 0
方法一(AC)后面计算分两步来做
#include<stdio.h>#include<string.h>int main(){int n1,m1,n2,m2,i,j,m,n;int a[105][105],b[105][105],c[105][105];while(scanf("%d%d%d%d",&n1,&m1,&n2,&m2)!=EOF){for(i=0;i<=100;i++){for(j=0;j<=100;j++)a[i][j]=b[i][j]=c[i][j]=0;}for(i=0;i<n1;i++){for(j=0;j<m1;j++)scanf("%d",&a[i][j]);}for(i=0;i<n2;i++){for(j=0;j<m2;j++)scanf("%d",&b[i][j]);}n=m1>n2?m1:n2;m=n1>m2?n1:m2;for(i=0;i<n1;i++){for(j=0;j<m1;j++)c[j][i]=a[i][j];}for(i=0;i<n2;i++){for(j=0;j<m2;j++)c[i][j]+=b[i][j];}for(i=0;i<n;i++){for(j=0;j<m;j++){if(j!=m-1)printf("%d ",c[i][j]);elseprintf("%d\n",c[i][j]);}}}return 0;}
#include<stdio.h>
#include<string.h>
int main()
{
int n1,m1,n2,m2,i,j,m,n;
int a[105][105],b[105][105],c[105][105];
while(scanf("%d%d%d%d",&n1,&m1,&n2,&m2)!=EOF)
{
for(i=0;i<=100;i++)
{
for(j=0;j<=100;j++)
a[i][j]=b[i][j]=c[i][j]=0;
}
for(i=0;i<n1;i++)
{
for(j=0;j<m1;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<n2;i++)
{
for(j=0;j<m2;j++)
scanf("%d",&b[i][j]);
}
n=m1>n2?m1:n2;
m=n1>m2?n1:m2;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
c[i][j]=a[j][i]+b[i][j];
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(j!=m-1)
printf("%d ",c[i][j]);
else
printf("%d\n",c[i][j]);
}
}
}
return 0;
}