mnnu 2215 矩阵相加【简单题但好几次才ac】【至今不知打的第一遍哪里错了】

来源:互联网 发布:淘宝店铺代运营靠谱吗 编辑:程序博客网 时间:2024/05/01 13:24

2215:矩阵相加

Time/Memory Limit:1000 MS/32768 KSubmitted: 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 31 1 11 1 11 1 11 1 1

 Sample Output

2 2 12 2 11 1 0

 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;//初始化,你这特么是初始化么,一开始直接就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]);elseprintf("%d\n",c[i][j]);}}}return 0;}

0 0
原创粉丝点击