index_source 2021-08-25 13:15 采纳率: 66.7%
浏览 34
已结题

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

```

  • 写回答

1条回答 默认 最新

  • StjpStjp 2021-08-25 13:25
    关注
    如果我的回答对你有帮助,请点击采纳按钮,谢谢
    改好了,代码见下:
    
    #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;
    } 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月2日
  • 已采纳回答 8月25日
  • 创建了问题 8月25日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境