3020: 对称矩阵(数组)
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 47 Solved: 21
[ Submit][ Status][ Web Board]
Description
已知A和B为两个n*n阶的对称矩阵,输入时,对称矩阵只输入下三角行元素,存入一维数组,设计一个程序,实现以下功能。
1、求对称矩阵A和B的和。
2、求对称矩阵A和B得到乘积。
Input
输入包含两行,第一行为一个整数N,接下来为N个整数。N满足(N=n+n*(n-1)/2)n为矩阵的行数。
Output
输出对称矩阵A和B的和与乘积,中间留有一个空行!
Sample Input
2
1 2 3
1 2 3
Sample Output
2 4
4 6
5 8
8 13
#include<stdio.h> #include<math.h> int main() { int n,i,j,m=0,k=0,a[10],b[10],a1[10][10],b1[10][10],x,temp,c[10][10],l; scanf("%d",&n); for(i=0;i<n;i++) { do { scanf("%d",&a[m]); m++; } while(getchar()!='\n'); do { scanf("%d",&b[k]); k++; } while(getchar()!='\n'); l=(-1+sqrt(1+8*m))/2; for(i=0; i<l; i++) { for(j=0; j<=i; j++) { a1[j][i]=a1[i][j]=a[i+j]; b1[j][i]=b1[i][j]=a[i+j]; } } for(i=0; i<l; i++) { for(j=0; j<l; j++) { if(j!=l-1) printf("%d ",a1[i][j]+b1[i][j]); else printf("%d",a1[i][j]+b1[i][j]); } printf("\n"); } printf("\n"); for(i=0; i<l; i++) { for(j=0; j<l; j++) { temp=0; for(x=0; x<l; x++) { temp+=a1[x][j]*b1[i][x]; } c[i][j]=temp; if(j!=l) printf("%d ",c[i][j]); else printf("%d",c[i][j]); } printf("\n"); } } return 0; }