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
2 3 2 3
1 1 1
1 1 1
1 1 1
1 1 1
Sample Output
2 2 1 2 2 1 1 1 0
Hints
例如1 2 34 5 6转置后:1 42 53 61 1 1 1 1 2 2 11 1 + 1 1 1 = 2 2 11 1 1 1 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;//初始化,你这特么是初始化么,一开始直接就a[100][100],打死你!}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;//初始化,你这特么是初始化么,一开始直接就a[100][100],打死你!
}
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;
}