已知A和B为两个n×n阶的对称矩阵,输入时,对称矩阵只输入下三角形元素,存入一维数组,如图所示(对称矩阵M存储在一维数组A中),设计一个算法求对称矩阵A和B的乘积。
【正确答案】对称矩阵第i行和第j列元素的数据在一维数组中的位置是:
i×(i-i)/2+j (当i≥j时)
j×(j-1)/2+i (当i<j时)
本题实现代码如下:
int value(int a[],int i,int j)
{
if (i>=j)
return a[(i*(i-1))/2+j];
else
return a[(j*(j-1))/2+i];
}
void mult(int a[],int b[],int c[n][n])
{
int i,j,k,s;
for(i=0;i<n;++i)
for(j=0;j<n;++j)
{
s=0;
for(k=0;k<n;++k)
s=s+value(a,i,k)*value(b,k,j);
c[i][j]=s;
}
}
void disp(int a[])
{
int i,j;
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
cout<<setw(3)<<value(a,i,j);
cout<<endl;
}
}
【答案解析】