注意点:
保留一位小数;考虑相加为零的项;题目中没说最终结果为零的情况
#include<iostream>
#include<iomanip>
using namespace std;
struct poly
{
int ye;
double yc;
};
int main()
{
struct poly a[10], b[10], ans[20];
int k1, k2, i, k3 = 0;
int t1 = 0, t2 = 0;
cin >> k1;
for (i = 0; i < k1; i++)
cin >> a[i].ye >> a[i].yc;
cin >> k2;
for (i = 0; i < k2; i++)
cin >> b[i].ye >> b[i].yc;
while (t1 < k1 && t2 < k2)
{
if (a[t1].ye > b[t2].ye)
{
ans[k3] = a[t1];
t1++;
k3++;
continue;
}
if (a[t1].ye < b[t2].ye)
{
ans[k3] =b[t2];
t2++;
k3++;
continue;
}
if (a[t1].yc + b[t2].yc > 0.01 || a[t1].yc + b[t2].yc < -0.01)
{
ans[k3].ye = a[t1].ye;
ans[k3].yc = a[t1].yc + b[t2].yc;
k3++;
}
t1++;
t2++;
}
for (i = t1; i < k1; i++)
{
ans[k3] = a[i];
k3++;
}
for (i = t2; i < k2; i++)
{
ans[k3] = b[i];
k3++;
}
if (k3 == 0)
{
cout << "0" << endl;
return 0;
}
cout << k3;
cout.setf(ios::fixed);
for (i = 0; i < k3; i++)
{
cout << " " << ans[i].ye << " ";
cout << fixed << setprecision(1) << ans[i].yc;
}
return 0;
}