续多项式加法

来源:互联网 发布:蚁群算法matlab程序 编辑:程序博客网 时间:2024/04/28 12:28

上次用链表写的,提交不对,这次改用数组写,还是提交不对,真心要疯了!

请高手指点!!

#include <iostream>using namespace std;void sortexpn(int p[]){int i,j,len = p[0];for (i=2;i<=2*len;i=i+2)for (j = 2; j <= 2*len - i; ){if (p[j] == p[j+2]){p[j-1] += p[j+1];for (int k = j+3;k<=2*len;k++)p[k-2] = p[k];len--;}else if (p[j] < p[j+2]){int tmp1 = p[j];p[j] = p[j+2];p[j+2] = tmp1;int tmp2 = p[j-1];p[j-1] = p[j+1];p[j+1] = tmp2;j=j+2;}else{j = j+2;}}p[0] = len;}void addpoly(int p1[],int p2[],int p3[]){int len1 = p1[0], len2 = p2[0],len3 = 0;int i = 2,j = 2, k = 1;while (i <= 2*len1 && j <= 2*len2){if (p1[i] == p2[j]){int temp = p1[i-1]+p2[j-1];if (temp != 0){p3[k] = temp;p3[k+1] = p1[i];i = i+2;j = j+2;k = k+2;len3++;}else{i = i+2;j = j+2;}}else if (p1[i] > p2[j]) {p3[k] = p1[i-1];p3[k+1] = p1[i];i = i+2;k = k+2;len3++;}else{p3[k] = p2[j -1];p3[k+1] = p2[j];j = j+2;k = k+2;len3++;}}if (i<=2*len1){for (; i<=2*len1;i = i+2){p3[k] = p1[i-1];p3[k+1] = p1[i];k = k+2;len3++;}}if (j<=2*len2){for (;j<=2*len2;j=j+2){p3[k] = p2[j -1];p3[k+1] = p2[j];k = k+2;len3++;}}p3[0] = len3;}int main(){int poly[200][300];int n,i,j;cin>>n;for(i=0;i<2*n;i++){j=1;int len=0;int coef,expn;cin>>coef>>expn;while(expn >= 0){poly[i][j] = coef;poly[i][j+1] = expn;j += 2;len++;cin>>coef>>expn;}poly[i][0] = len;} for (i = 0; i<2*n;i = i+2){sortexpn (*(poly+i));sortexpn(*(poly+i+1));int tmp[300];addpoly(*(poly+i),*(poly+i+1),tmp);for (int k=1;k <= 2*tmp[0];k=k+2)cout<<"["<<tmp[k]<<" "<<tmp[k+1]<<"] ";cout<<endl; }return 0; }