PAT甲级1002结构体写法有测试点不过

CSDN上搜到的其他解法我看了,我是想找到我这个解法有2个点不过的原因,求修改后成功通过的代码,谢谢

```c++
#include<iostream>
#include<algorithm>
#include<vector>
#include<iomanip>
#include<cmath>
using namespace std;
/*定义第一行*/
struct Polynomials1
{
    int N; float a;
};
/*定义第二行*/
struct Polynomials2
{
    int N; float a; bool flag = true;
};
/*定义加起来的行*/
struct newPol
{
    int N; float a;
};
/*用于排序比较*/
bool cmp(newPol a, newPol b)
{
    return  a.N > b.N;
}
int main()
{
    int K1, K2, i, j, k = 0,count=0;
    cin >> K1;
    vector<Polynomials1>index_1(K1);
    /*输入内容*/
    for (i = 0; i < K1; ++i)
    {
        cin >> index_1[i].N;
        cin >> index_1[i].a;
    }
    cin >> K2;
    vector<Polynomials2>index_2(K2);
    vector<newPol>index_3(K1 + K2);
    for (i = 0; i < K2; ++i)
    {
        cin >> index_2[i].N;
        cin >> index_2[i].a;
    }
    for (i = 0; i < K1; i++)
    {
        index_3[i].N = index_1[i].N;
        index_3[i].a = index_1[i].a;

        /*开始第一轮拷贝*/
        for (j = 0; j < K2; j++)
        {
            /*查找第二行中和第一行指数相同的项,如果匹配,系数累加,写入newPol*/
            if (index_1[i].N == index_2[j].N)
            {
                index_3[i].a += index_2[j].a;
                /*匹配成功后,该项flag变为false,第二轮将直接跳过*/
                index_2[j].flag = false;
            }
        }
    }
    /*开始第二轮拷贝,对于第一轮中,把第二行中没有和第一行匹配的项添加到newPol的结尾*/
    for (i = K1; i < K1+K2; ++i)
            if (index_2[i-K1].flag == true)
            {
                index_3[i].N = index_2[i-K1].N;
                index_3[i].a = index_2[i-K1].a;
                ++k;
            }

    /*将newPol降幂排序*/
    sort(index_3.begin(), index_3.end(), cmp);
    for (i = 0; i < K1 + k; ++i)
    {
        if (abs(index_3[i].a) < 0.000001)
            ++count;
    }
        if (count == K1 + k-1)
        {
            cout << '0';
            return 0;
        }
        else
            cout << K1 + k - count;
    for (i = 0; i < K1 + k; ++i)
    {
        if (abs(index_3[i].a) < 0.000001)
            continue;
        else
        {
            cout << ' ' << index_3[i].N;
            cout << ' ' << fixed << setprecision(1) << index_3[i].a;
        }
    }
    
    return 0;
}




img

```

如果我的回答对你有帮助,请点击采纳按钮,谢谢
改好了,代码见下:

#include<stdio.h>
typedef struct data{
    int exp;
    double coe;
}data;
int main()
{
    int k1, k2, i;
    int a = 0, b = 0, s = 0;//位置标识符 
    scanf("%d ", &k1);
    data A[k1];
    for (i = 0; i < k1; ++i){
        scanf("%d %lf", &A[i].exp, &A[i].coe);
    }
    
    scanf("%d", &k2);
        data B[k2];
    for (i = 0; i < k2; ++i){
        scanf("%d %lf", &B[i].exp, &B[i].coe);
    }
    data sum[k1+k2];
    while(a < k1 && b < k2){
        if (A[a].exp < B[b].exp){
            sum[s].exp =B[b].exp;
            sum[s].coe = B[b].coe;
            ++b;
            ++s; 
            continue;
        }
        if (A[a].exp > B[b].exp){
            sum[s].exp =A[a].exp;
            sum[s].coe = A[a].coe;
            ++a;
            ++s;
            continue; 
        }
        if (A[a].exp == B[b].exp){
            if (A[a].coe + B[b].coe == 0) {
                ++a;
                ++b;
                continue;
            }
            sum[s].exp = A[a].exp;
            sum[s].coe = A[a].coe + B[b].coe;
            ++a,
            ++b;
            ++s;
        }
    }
    while (a < k1){
        sum[s].coe = A[a].coe;
        sum[s].exp = A[a].exp;
        ++a;
        ++s;
    }
    while (b < k2){
        sum[s].coe = B[b].coe;
        sum[s].exp = B[b].exp;
        ++b;
        ++s;
    }
    printf("%d", s);
    for (i = 0; i < s; ++i) {
        printf(" %d %.1f",sum[i].exp, sum[i].coe);    
    }
    return 0;
}