【正确答案】依题意,本题采用了一个稀疏矩阵到一维数组之间的映射关系,在进行加法运算时,依次遍历A和B的行列值,且以行为主,当行列相同时,将第3个元素值相加产生的3个元素放入结果数组中,不相同时,将A或B的三个元素直接放入结果数组中。
实现本题功能代码如下:
void matrixadd(int A[],int B[],int C[])
{
int i=0,j=0,k=0,m;
//i是A的下标,j是B的下标,k是C的下标,这些下标都是从0开始的
while(A[i]!=-1 && B[j]!=-1)//循环直到A或B均结束
{
if(A[i]==B[j]) //行相等
{
if(A[i+1]==B[j+1]) //且列相等
{
m=A[i+2]+B[j+2];
if(m!=0) //结果值大于0时放入C中
{
C[k]=A[i];
C[k+1]=A[i+1];
C[k+2]=m;
k=k+3;
}
i=i+3;j=j+3;
}
else if(A[i+1]<B[j+1])
//A的列小于B的列,将A的3个元素直接放入C中
{
C[k]=A[i];
C[k+1]=A[i+1];
C[k+2]=A[i+2];
k=k+3;
i=i+3;
}
else //B的列小于A的列,将B的3个元素直接放入C中
{
C[k]=B[j];
C[k+1]=B[j+1];
C[k+2]=B[j+2];
k=k+3;
j=j+3;
}
}
else if(A[i]<B[j])
//A的行小于B的行,将A的3个元素直接放入C中
{
C[k]=A[i];
C[k+1]=A[i+1];
C[k+2]=A[i+2];
k=k+3;
i=i+3;
}
else //B的行小于A的行,将B的3个元素直接放入C中
{
C[k]=B[j];
C[k+1]=B[j+i];
C[k+2]=B[j+2];
k=k+3;
j=j+3;
}
} //循环结束
if(A[i]==-1) //A结束,B还有元素,则将B的所有元素直接放入C中
while(B[j]!=-1)
{
C[k]=B[j];
C[k+1]=B[j+1];
C[k+2]=B[j+2];
k=k+3;
j=j+3;
}
else //B结束,A还有元素,则将A的所有元素直接放入C中
while(A[i]!=-1)
{
C[k]=A[i];
C[k+1]=A[i+1];
C[k+2]=A[i+2];
k=k+3;
i=i+3;
}
C[k]=-1;
}
【答案解析】