题目如上,编程如下,求各位高人指点迷津。我觉得我做的没任何问题,可是通过率只有百分之几..
算法原理:
使用双循环,内循环pN,外循环pM。若发现pN有元素与pM行列数相同,相加不为0则计入pQ中,再使pM的下一个元素继续进行上述操作。
若遍历一遍pN,未发现可与pM行列数相同,则将pM数据计入pQ中。
最后一个双循环,内循环pM,外循环pN,目的:遍历一遍pM,找出未与pM行列数相同的pN元素,将其数据计入pQ中。
bool add_matrix(const TSMatrix* pM, const TSMatrix* pN, TSMatrix* pQ) {
if ( pM->m != pN->m || pM->n != pN->n)
{
return false;
}
else
{
pQ->m = pM->m;
pQ->n = pM->n;
int i_q= 0;
int i_m = 0;
int i_n = 0;
for (int x = 1; x <=pM->len; x++)
{
int count = 0;
for (int y = 1; y <= pN->len; y++)
{
if (pM->data->i==pN->data->i)
{
if (pM->data->j==pN->data->j)
{
if (pM->data->e+pN->data->e != 0)
{
pQ->data->i = pM->data->i;
pQ->data->j = pM->data->j;
pQ->data->e = pM->data->e + pN->data->e;
pQ->data[i_q++];
pQ->len++;
}
count++;
}
}
pN->data[i_n++];
}
if (count == 0)
{
pQ->data->i = pM->data->i;
pQ->data->j = pM->data->j;
pQ->data->e = pM->data->e;
pQ->data[i_q++];
pQ->len++;
}
pM->data[i_m++];
}
i_m = 0;
i_n = 0;
for (int x = 1; x < pN->len; x++)
{
int count = 0;
for (int y = 1; y <= pM->len; y++)
{
if (pN->data->i == pM->data->i)
{
if (pN->data->j == pM->data->j)
{
count++;
}
}
pM->data[i_m++];
}
if (count == 0)
{
pQ->data->i = pN->data->i;
pQ->data->j = pN->data->j;
pQ->data->e = pN->data->e;
pQ->data[i_q++];
pQ->len++;
}
pN->data[i_n++];
}
return true;
}
}