原题地址

https://pta.patest.cn/pta/test/15/exam/4/question/710

5-2 一元多项式的乘法与加法运算   (20分)

设计函数分别求两个一元多项式的乘积与和。

输入格式:

输入分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
/*
评测结果
时间 结果 得分 题目 编译器 用时(ms) 内存(MB) 用户
2017-07-08 15:53 答案正确 20 5-2 gcc 3 1
测试点结果
测试点 结果 得分/满分 用时(ms) 内存(MB)
测试点1 答案正确 12/12 3 1
测试点2 答案正确 4/4 2 1
测试点3 答案正确 2/2 2 1
测试点4 答案正确 2/2 1 1 框架
- 读入
- 处理
-- 处理加法
-- 处理乘法
- 输出 结构:结构数组 系数
幂数
当前下标
最大下标 量
存第一行
存第二行
存第一行第二行的和
存当前乘法结果
存之前的结果
*/
#include<stdio.h>
#define MAXLEN 10000
struct item{
int coefficient;
int index;
}; typedef struct multinomial{
struct item data[MAXLEN];
int len;
}MN; MN mulA,mulB,mulSum,mulProduct; void MnCopyFirstToSecond(MN *a,MN *b)
{
int i,j;
b->len=a->len;
for(i=0;i<a->len;i++)
{
b->data[i].coefficient=a->data[i].coefficient;
b->data[i].index=a->data[i].index;
}
}
void CalcPlus( MN mA,MN mB,MN *mSum)
{
int i=0,j=0;
mSum->len=0;
while(i<mA.len && j<mB.len) //两个串都没结束
{
if(mA.data[i].index>mB.data[j].index){
if(mA.data[i].coefficient==0){//提防0系数
i++;
continue;
}
mSum->data[mSum->len].coefficient=mA.data[i].coefficient;
mSum->data[mSum->len].index=mA.data[i].index;
mSum->len++;
i++;
}
else if(mB.data[j].index>mA.data[i].index){
if(mB.data[j].coefficient==0){//提防0系数
j++;
continue;
}
mSum->data[mSum->len].coefficient=mB.data[j].coefficient;
mSum->data[mSum->len].index=mB.data[j].index;
mSum->len++;
j++;
}
else if(mA.data[i].index==mB.data[j].index){
if(mA.data[i].coefficient+mB.data[j].coefficient==0){//考虑相加得0的情况
i++;
j++;
continue;
}
mSum->data[mSum->len].coefficient=mA.data[i].coefficient+mB.data[j].coefficient;
mSum->data[mSum->len].index=mA.data[i].index;
mSum->len++;
i++;
j++;
}
} while(i<mA.len){//B结束A没结束
if(mA.data[i].coefficient==0)
{
i++;
continue;
}
mSum->data[mSum->len].coefficient=mA.data[i].coefficient;
mSum->data[mSum->len].index=mA.data[i].index;
mSum->len++;
i++;
} while(j<mB.len){//A结束B没结束
if(mB.data[j].coefficient==0){
j++;
continue;
}
mSum->data[mSum->len].coefficient=mB.data[j].coefficient;
mSum->data[mSum->len].index=mB.data[j].index;
mSum->len++;
j++;
} } void CalcMultiply(MN a,MN b,MN *res)
{
MN currentResult,tempSum;
currentResult.len=0;
tempSum.len=0;
int i=0,j=0;
while(i<a.len){//多项式逐项相乘
while(j<b.len){
currentResult.data[currentResult.len].coefficient=a.data[i].coefficient*b.data[j].coefficient;
currentResult.data[currentResult.len].index=a.data[i].index+b.data[j].index;
currentResult.len++;
j++;
}
CalcPlus(currentResult,tempSum,res);
MnCopyFirstToSecond(res,&tempSum);//CalcPlus()函数中第二个参数与第三个不能相同,故把最近一次累加的结果复制到tempSum中去。
currentResult.len=0;
i++;
j=0; } } void GetInput()
{
int i; scanf("%d",&i);
mulA.len=i;
for(i=0;i<mulA.len;i++)
scanf("%d %d",&mulA.data[i].coefficient,&mulA.data[i].index); scanf("%d",&i);
mulB.len=i;
for(i=0;i<mulB.len;i++)
scanf("%d %d",&mulB.data[i].coefficient,&mulB.data[i].index);
} void PrintResult(MN m)
{
if(m.len==0)
{
printf("0 0");
return;
}
int i;
for (i=0;i<m.len;i++)
{
printf("%d %d",m.data[i].coefficient,m.data[i].index);
if(i!=m.len-1)
putchar(' '); }
} int main()
{
GetInput();
CalcMultiply(mulA,mulB,&mulProduct);
PrintResult(mulProduct);
putchar('\n');
CalcPlus(mulA,mulB,&mulSum);
PrintResult(mulSum);
}

  

PTA 02-线性结构2 一元多项式的乘法与加法运算 (20分)的更多相关文章

  1. PTA数据结构 习题3.6 一元多项式的乘法与加法运算 (20分)

    一元多项式的乘法与加法运算 https://pintia.cn/problem-sets/434/problems/5865 设计函数分别求两个一元多项式的乘积与和. 时间限制:200 ms 内存限制 ...

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

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

  3. 线性结构2 一元多项式的乘法与加法运算 【STL】

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

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

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

  5. 3-04. 一元多项式的乘法与加法运算(20)(ZJU_PAT 结构体)

    题目链接:http://pat.zju.edu.cn/contests/ds/3-04 设计函数分别求两个一元多项式的乘积与和. 输入格式说明: 输入分2行.每行分别先给出多项式非零项的个数.再以指数 ...

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

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

  7. 一元多项式的乘法与加法运算 【STL-map哈希-map反向迭代器遍历 + 零多项式】

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

  8. 一元多项式的乘法与加法运算(C语言)

    输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 输出分2行,分别以指数递降方 ...

  9. PAT线性结构_一元多项式求导、按给定步长反转链表、出栈序列存在性判断

    02-线性结构1. 一元多项式求导 (25) 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过100 ...

随机推荐

  1. 通俗易懂的Nhibernate教程(1) ----- 基本操作,映射,CURD

    网站架构: 1.图片 2.说明 Data  -----------------------   类库项目,数据访问层,由Nhibernate提供数据相关操作 Mapping ------------- ...

  2. 【译】OpenStack Heat基础介绍

    原文:http://blog.scottlowe.org/2014/05/01/an-introduction-to-openstack-heat/ 本文将简要地介绍OpenStack Heat. H ...

  3. 在DLL中创建窗口时一个值得注意的地方 — UnregisterClass

    背景描述: 今天要测试一份注入代码,拿以前写的创建窗口的DLL来做测试. 第一次注入时一切正常,窗口被成功创建并显示,但在第二次加载时窗口没有显示出来. 经过研究发现在第二次加载DLL时Registe ...

  4. javaee 第四周作业

    分析hello.java.下载链接:https://github.com/javaee/tutorial-examples/tree/master/web/jsf/hello1 /** * Copyr ...

  5. SQLite – GROUP BY

    SQLite - GROUP BY SQLite GROUP BY子句中使用与SELECT语句的合作安排相同的数据组. 在GROUP BY子句之前一个SELECT语句的WHERE子句,先于ORDER ...

  6. Python虚拟环境 之 virtualenv 与 virtualenvwrapper

           在开发Python应用程序的时候,比如系统安装的Python3只有一个版本:3.6.所有第三方的包都会被 pip 安装到Python3的 site-packages 目录下. 如果我们要 ...

  7. QT5:第二章 布局排版控件

    一.简介 在QT组件面板中有Layouts和Spacers两个组件面板 注意:布局排版控件不显示 1.Layouts(布局) Vertical Layout:垂直方向布局,组件自动在垂直方向上分布 H ...

  8. URAL1966 Cipher Message 3

    题目描述 题解: 能看出来的是,每一组数只能改最后一位,所以前$7$位动不了. 所以$KMP$跑一跑. 重点在于最后一位怎么搞. 如果$KMP$跑完了还没找到合适的位置,直接$puts("N ...

  9. hdu5126 stars

    题目描述 题解: 和二维的比起来差不多. 但是这是四维偏序. 所以搞一下CDQ套CDQ. CDQ是维度a已经有序,按维度b排序,然后将维度c存入一维数据结构. 所以我们在第一层CDQ中分治处理,将合法 ...

  10. TP框架中同时使用“or”和“and”

    今天在tp中遇到一个问题,可能这并不算难的问题,但是我还是分享一下 以下是tp手册里面查询or的方式 $User = M("User"); // 实例化User对象 $where[ ...