题目
A、B两个n阶对称矩阵,当输入时只存储下三角元素与一个一维数组中
试编写一个A与B相乘的函数
代码
/**
* 算法思路
* 对称矩阵M的第i行和第j列的元素的数据存储在一维数组a中的位置k的计算公式:
* 1、当i大于或等于j时,k = (i * (i + 1)) / 2 + j (下三角)
* 2、当i小于j时,k = (j * (j + 1)) / 2 + i (上三角)
*
*/
#include <iostream>
using namespace std;
#define N 3
int getValue(int a[],int i,int j){
int k;
if(i>=j){
k=(i*(i+1))/2+j;
}else{
k=(j*(j+1))/2+i;
}
return a[k];
}
void inputArray(int a[],int n){
for(int i=0;i<(n*(n+1))/2;i++){
cin>>a[i];
}
}
void dispArray(int a[],int n){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<getValue(a,i,j)<<" ";
}
cout<<endl;
}
}
/**
* 矩阵的乘法
**/
void product(int a[],int b[],int c[][N]){
int sum;
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
sum=0;
for(int k=0;k<N;k++){
cout<<getValue(a,i,k)<<"*"<<getValue(b,k,j)<<" +";
sum+=getValue(a,i,k)*getValue(b,k,j);
}
cout<<endl;
c[i][j]=sum;
}
}
}
/**
* 矩阵的加法
**/
void count(int a[],int b[],int c[][N]){
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
c[i][j]=getValue(a,i,j)+getValue(b,ij);
}
}
}
int main() {
int a[N],b[N],mult[N][N];
inputArray(a,N);
dispArray(a,N);
cout<<endl;
inputArray(b,N);
dispArray(b,N);
cout<<"矩阵的乘积:"<<endl;
product(a,b,mult);
return 0;
}