02-线性结构2 一元多项式的乘法与加法运算(20 分)

3人阅读 评论(0) 收藏 举报
分类:

**题目来源:中国大学MOOC-陈越、何钦铭-数据结构-2018春
作者: DS课程组
单位: 浙江大学**

问题描述:
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。
输入样例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
输出样例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0

解答:这道题我写的时候思路很奇怪==,请勿模仿,用两个map分别存两个多项式{指数:系数}的对应信息,又用3个set,其中两个set分别存两个多项式的指数信息,用于之后从map中取系数进行运算,另一个set用于结果生成(因为set自动排好序了)。还是推荐采用开大小为1001数组进行实现,更为直接,我会把数组实现的代码再贴上来。

#include <iostream>
#include <map>
#include <set>
using namespace std;
map<int,int> ExpAndNumA,ExpAndNumB,result;
set<int> ExpA,ExpB,resultSet;
void input(map<int,int> &SomeoneMap,set<int> &SomeoneSet,int N)
{
    for(int i=0; i<N; i++)
    {
        int num,exp;
        cin>>num>>exp;
        SomeoneMap[exp]=num;
        SomeoneSet.insert(exp);
    }
}
void add()
{
    for(auto it=ExpA.begin(); it!=ExpA.end(); it++)
    {
        resultSet.insert(*it);
        result[*it]=ExpAndNumA[*it];
    }
    for(auto it=ExpB.begin(); it!=ExpB.end(); it++)
    {
        if(result.count(*it)==0)
        {
            resultSet.insert(*it);
            result[*it]=ExpAndNumB[*it];
        }
        else
            result[*it]+=ExpAndNumB[*it];
    }
}
void multi()
{
    for(auto it=ExpA.begin(); it!=ExpA.end(); it++)
    {
        for(auto it2=ExpB.begin(); it2!=ExpB.end(); it2++)
        {
            int newExp=*it+*it2;
            int newNum=ExpAndNumA[*it]*ExpAndNumB[*it2];
            if(result.count(newExp)==0)
            {
                resultSet.insert(newExp);
                result[newExp]=newNum;
            }
            else
                result[newExp]+=newNum;
        }
    }
}
void output()
{
    bool flag=0;
    for(auto rit=resultSet.rbegin(); rit!=resultSet.rend(); rit++)
    {
        if(result[*rit]!=0)
        {
            flag=1;
            if(rit==resultSet.rbegin())
            {
                cout<<result[*rit]<<" "<<*rit;
            }
            else
            {
                cout<<" "<<result[*rit]<<" "<<*rit;
            }
        }
    }
    if(!flag)
        cout<<"0 0";
}
int main()
{
    int N1,N2;
    cin>>N1;
    input(ExpAndNumA,ExpA,N1);
    cin>>N2;
    input(ExpAndNumB,ExpB,N2);
    result.clear();
    resultSet.clear();
    multi();
    output();
    cout<<endl;
    result.clear();
    resultSet.clear();
    add();
    output();
    return 0;
}
查看评论

20小时掌握Python语言

-
  • 1970年01月01日 08:00

02-线性结构2 一元多项式的乘法与加法运算 (20分)

设计函数分别求两个一元多项式的乘积与和。 输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。...
  • wanmeiwushang
  • wanmeiwushang
  • 2016-09-22 18:43:58
  • 5048

[PAT] 02-线性结构2 一元多项式的乘法与加法运算

[PAT] 02-线性结构2 一元多项式的乘法与加法运算设计函数分别求两个一元多项式的乘积与和。输入格式说明:输入分2行。每行分别先给出多项式非零项的个数。再以指数递降方式输入一个多项式非零项系数和指...
  • the_victory
  • the_victory
  • 2016-09-22 11:28:48
  • 856

02-线性结构1 一元多项式的乘法与加法运算

#include #include typedef struct node{ int coefficient; int exponent; struct node * next; } P...
  • asunamashiro
  • asunamashiro
  • 2015-09-17 15:00:07
  • 4041

PAT 02-线性结构2 一元多项式的乘法与加法运算 (java)

使用Java语言和数组实现一元多项式的乘法与加法运算,其中主要内容包括,程序框架,函数分析和原代码。...
  • u014800380
  • u014800380
  • 2016-09-25 22:35:34
  • 1080

02-线性结构1 一元多项式的乘法与加法运算 (20分)

02-线性结构1 一元多项式的乘法与加法运算   (20分) 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降...
  • sysusyf
  • sysusyf
  • 2016-03-26 16:51:46
  • 1448

02 - 线性结构 2 一元多项式的乘法与加法运算 (20 分)

设计函数分别求两个一元多项式的乘积与和。输入格式:输入分 2 行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分...
  • qq_24942951
  • qq_24942951
  • 2017-03-11 23:02:28
  • 180

02-线性结构1 一元多项式的乘法与加法运算

02-线性结构1 一元多项式的乘法与加法运算   (20分) 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式...
  • u014705854
  • u014705854
  • 2015-10-04 22:25:45
  • 385

PTA 02-线性结构2 一元多项式的乘法与加法运算

02-线性结构2 一元多项式的乘法与加法运算(20 分) 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入...
  • qq_35283188
  • qq_35283188
  • 2017-09-20 00:11:45
  • 146

浙江大学PAT上机题解析之3-04. 一元多项式的乘法与加法运算

多项式 乘法与加法
  • chenglechao
  • chenglechao
  • 2013-09-02 11:26:46
  • 2996
    个人资料
    持之以恒
    等级:
    访问量: 637
    积分: 290
    排名: 27万+
    文章存档