IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> A1002 A+B for Polynomials (25 分)PAT甲级(C++)【多项式处理】 -> 正文阅读

[C++知识库]A1002 A+B for Polynomials (25 分)PAT甲级(C++)【多项式处理】

This time, you are supposed to find?A+B?where?A?and?B?are two polynomials.

Input Specification:

Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:

K?N1??aN1???N2??aN2???...?NK??aNK??

where?K?is the number of nonzero terms in the polynomial,?Ni??and?aNi???(i=1,2,?,K) are the exponents and coefficients, respectively. It is given that?1≤K≤10,0≤NK?<?<N2?<N1?≤1000.

Output Specification:

For each test case you should output the sum of?A?and?B?in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.

Sample Input:

2 1 2.4 0 3.2
2 2 1.5 1 0.5

Sample Output:

3 2 1.5 1 2.9 0 3.2

题意分析:?

题目的意思很简单,有A和B两个多项式,我们要将它们相加,即合并同类项

对于给的测试样例:A=2.4x+3.2? ? ? ? B=1.5x^2+0.5x? ? ? ? 所以C=A+B=1.5x^2+2.9x+3.2

我们可以将多项式中的每一个项表示为一个结构体Term,包含指数exp和系数coe两个属性

题目中的项是按照指数递减的顺序排列的,且不会重复,所以将两个多项式的项同时开始遍历,取指数大的那个项先放入C中,如果指数相同,则系数相加再放入C中

注意!!!测试点345是针对系数相加为0的情况,0的话就不用放入C了;测试点6是针对A+B=0的情况,单独处理,直接输出0!!!

害,都是血泪教训。。。

代码如下:

#include<iostream>
#include<vector>
using namespace std;
struct Term
{
    int exp;
    double coe;
};
int main()
{
    vector<Term> C;
    int kA;
    scanf("%d",&kA);
    vector<Term> A;
    for(int i=0;i<kA;i++)
    {
        Term a;
        int exp;
        double coe;
        scanf("%d",&exp);
        scanf("%lf",&coe);
        a.exp=exp;
        a.coe=coe;
        A.push_back(a);
    }
    int kB;
    scanf("%d",&kB);
    vector<Term> B;
    for(int i=0;i<kB;i++)
    {
        Term b;
        int exp;
        double coe;
        scanf("%d",&exp);
        scanf("%lf",&coe);
        b.exp=exp;
        b.coe=coe;
        B.push_back(b);
    }
    int i=0,j=0;
    while(i<kA||j<kB){
        if(A[i].exp>B[j].exp)
        {
            C.push_back(A[i]);
            i++;
        }
        else if(A[i].exp<B[j].exp)
        {
            C.push_back(B[j]);
            j++;
        }
        else if(A[i].exp==B[j].exp)
        {
            Term temp;
            temp.exp=A[i].exp;
            temp.coe=A[i].coe+B[j].coe;
            if(temp.coe!=0){//系数和为0则删去
                C.push_back(temp);
            }
            i++;
            j++;
        }
    }
    while(i<kA)
    {
        C.push_back(A[i]);
        i++;
    }
    while(j<kB)
    {
        C.push_back(B[j]);
        j++;
    }
    int size=C.size();
    //A+B=0的情况单独处理,不然会有段错误
    if(size==0)printf("%d",0);
    else{
        printf("%d ",size);
        printf("%d %.1lf",C[0].exp,C[0].coe);
        for(int i=1;i<C.size();i++)
        {
            printf(" %d %.1lf",C[i].exp,C[i].coe);
        }
    }
    printf("\n");
    return 0;
}

运行结果如下:

(我不理解的是,在判断语句 while( i < kA || j < kB ) 中,我一开始写的是while( i != kA || j !=kB ),这样就会报段错误,我也想不通为什么,找了很久错误,甚至以为是vector的某种原因,最后改成现在这样就ok了,希望有大佬可以评论区解释一下~~)

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:18:35  更:2022-03-24 00:18:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:10:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码