输入样例
输入4行
第一行为多项式一的项数
第二行为多项式一按照指数递增的次序依次排列的系数以及指数
第三四行同理
思路
逐项遍历比较两个多项式的指数,如果指数不一样就把指数比较小的那个赋值给C,如果一样的话就把两者系数相加,然后把指数也赋值给C
源码实现
/*
* 用c++实现线性表
* 样例:两个(稀疏)多项式的相加
*/
#include<iostream>
using namespace std;
constexpr auto MAXSIZE = 100;
struct Polynomial
{
float p;//存储系数
int e;//存储指数
};
struct MyList
{
Polynomial* elem;
int Length;
};
void InitList(MyList*L)
{
L->elem = (Polynomial*)malloc(sizeof(Polynomial) * MAXSIZE);
L->Length = 0;
}//构造一个空的线性表(初始化)
void ADDUP(MyList A, MyList B, MyList& C) {
int length1 = A.Length;
int length2 = B.Length;
int i = 0;
int j = 0;
int k = 0;
while (i < length1 && j < length2) {
if (A.elem[i].e < B.elem[j].e) {
C.elem[k].e = A.elem[i].e;
C.elem[k].p = A.elem[i].p;
k++;
i++;
C.Length++;
}
else if (B.elem[j].e < A.elem[i].e) {
C.elem[k].e = B.elem[j].e;
C.elem[k].p = B.elem[j].p;
k++;
j++;
C.Length++;
}
else {
C.elem[k].e = A.elem[i].e +B.elem[j].e;
C.elem[k].p = A.elem[i].p;
k++;
j++;
i++;
C.Length++;
}
}
if (i == length1 && j != length2) {
for (int m = j; m < length2; m++) {
C.elem[k].e = B.elem[m].e;
C.elem[k].p = B.elem[m].p;
k++;
C.Length++;
}
}
else if (i != length1 && j == length2) {
for (int m = i; m < length1; m++) {
C.elem[k].e = A.elem[m].e;
C.elem[k].p = A.elem[m].p;
k++;
C.Length++;
}
}
}
int main() {
MyList A,B,C;
int n1, n2;
InitList(&A);
InitList(&B);
InitList(&C);
//使用malloc动态分配内存
cin >> n1;
A.Length = n1;
for (int i = 0; i < n1; i++) {
cin >> A.elem[i].p >> A.elem[i].e;
}
cin >> n2;
B.Length = n2;
for (int i = 0; i < n2; i++) {
cin >> B.elem[i].p >> B.elem[i].e;
}
ADDUP(A, B, C);
int length3 = C.Length;
cout << length3 << endl;
for (int k = 0; k < length3; k++) {
cout << C.elem[k].p << " " << C.elem[k].e << " ";
}
return 0;
}