PTA一元多项式的乘法与加法运算 另一种算法
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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
#include <stdio.h>
#include <stdlib.h> typedef struct PolyNode *Polynomial;
struct PolyNode{
int coef;
int expon;
Polynomial link;
}; Polynomial ReadPoly(void); // 采用带头节点插入的方法建立多项式链表 先建立带头节点的链表读入多项式数据 最后删除头节点
Polynomial Mult(Polynomial P1,Polynomial P2);
Polynomial Add(Polynomial P1,Polynomial P2);
void PrintPoly(Polynomial P);
void Attach(int coef,int expon, Polynomial *pRear); //增加新节点到多项式链表后 pRear 指向链表最后节点地址的指针
void DeletePoly(Polynomial p); // 删除一个多项式链表 int main(){
Polynomial P1,P2,PP,PS; P1 = ReadPoly();
// PrintPoly(P1);
P2 = ReadPoly();
PP = Mult(P1,P2);
PrintPoly(PP);
PS = Add(P1,P2);
PrintPoly(PS); return 0;
} void Attach(int coef,int expon, Polynomial *pRear){
Polynomial p;
p = (Polynomial)malloc(sizeof(struct PolyNode));
p->coef = coef;
p->expon = expon;
p->link = NULL;
(*pRear)->link = p;
*pRear = p;
} Polynomial ReadPoly(void){
Polynomial P,Rear,t;
int n;
int coef,expon;
scanf("%d",&n);
P = (Polynomial)malloc(sizeof(struct PolyNode)); // 建立链表空的头节点
P->link = NULL;
Rear = P;
while (n--) {
scanf("%d %d",&coef,&expon);
Attach(coef,expon,&Rear);
}
t = P;
P = P->link;
free(t);
return P;
} void PrintPoly(Polynomial P){
int flag = 0;
if(P == NULL){
printf("0 0\n");
return;
}
// 最后一个没有空格 相当于除了开始,后面%d %d输出中间都有空格
while (P) {
if(!flag)
flag = 1;
else
printf(" ");
printf("%d %d",P->coef,P->expon);
P = P->link;
}
printf("\n");
} Polynomial Add(Polynomial P1,Polynomial P2){
Polynomial t1 = P1,t2 = P2,t;
Polynomial p,rear;
p = (Polynomial)malloc(sizeof(struct PolyNode));
rear = p;
while (t1 && t2) {
if(t1->expon == t2->expon){
if(t1->coef + t2->coef){
Attach(t1->coef+t2->coef, t1->expon, &rear);
t1 = t1->link;
t2 = t2->link;
}else{
t1 = t1->link;
t2 = t2->link;
}
}else if (t1->expon > t2->expon){
Attach(t1->coef, t1->expon, &rear);
t1 = t1->link;
}else{
Attach(t2->coef, t2->expon, &rear);
t2 = t2->link;
}
}
while (t1) {
Attach(t1->coef, t1->expon, &rear);
t1 = t1->link;
}
while (t2) {
Attach(t2->coef, t2->expon, &rear);
t2 = t2->link;
}
t = p;
p = p->link;
free(t);
return p;
} // 多项式相乘算法:
// 第一个多项式第一项和第二个多项式所有项相乘得到结果多项式P
// 遍历第一个多项式其他元素和第二个多项式相乘一个一个元素插入到结果多项式P中
Polynomial Mult(Polynomial P1,Polynomial P2){
Polynomial P,Rear,t1,t2,t;
int coef,expon; if(!P1 || !P2) // 多项式为NULL 多项式输出 ceof expon为0
return NULL; t1 = P1;
t2 = P2;
P = (Polynomial)malloc(sizeof(struct PolyNode));
Rear = P;
while (t2) {
Attach(t1->coef*t2->coef, t1->expon+t2->expon, &Rear);
t2 = t2->link;
}
t1 = t1->link;
while (t1) {
t2 = P2;
Rear = P;
while (t2) {
expon = t1->expon + t2->expon;
coef = t1->coef * t2->coef;
while (Rear->link && Rear->link->expon > expon) {
Rear = Rear->link;
}
if(Rear->link && Rear->link->expon == expon){
if(Rear->link->coef + coef){
Rear->link->coef = Rear->link->coef + coef;
}else{
t = Rear->link;
Rear->link = t->link;
free(t);
}
}else{
t = (Polynomial)malloc(sizeof(struct PolyNode));
t->expon = expon;
t->coef = coef;
t->link = Rear->link;
Rear->link = t;
Rear = Rear->link;
}
t2 = t2->link;
}
t1 = t1->link;
}
t = P;
P = P->link;
free(t);
return P;
}
PTA一元多项式的乘法与加法运算 另一种算法的更多相关文章
- PTA 02-线性结构2 一元多项式的乘法与加法运算 (20分)
原题地址 https://pta.patest.cn/pta/test/15/exam/4/question/710 5-2 一元多项式的乘法与加法运算 (20分) 设计函数分别求两个一元多项式的 ...
- PTA数据结构 习题3.6 一元多项式的乘法与加法运算 (20分)
一元多项式的乘法与加法运算 https://pintia.cn/problem-sets/434/problems/5865 设计函数分别求两个一元多项式的乘积与和. 时间限制:200 ms 内存限制 ...
- 线性结构2 一元多项式的乘法与加法运算 【STL】
02-线性结构2 一元多项式的乘法与加法运算(20 分) 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和 ...
- PAT 02-线性结构2 一元多项式的乘法与加法运算 (20分)
设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...
- 线性结构CT 02-线性结构1 一元多项式的乘法与加法运算
设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...
- 浙江大学PAT上机题解析之3-04. 一元多项式的乘法与加法运算
设计函数分别求两个一元多项式的乘积与和. 输入格式说明: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分 ...
- 3-04. 一元多项式的乘法与加法运算(20)(ZJU_PAT 结构体)
题目链接:http://pat.zju.edu.cn/contests/ds/3-04 设计函数分别求两个一元多项式的乘积与和. 输入格式说明: 输入分2行.每行分别先给出多项式非零项的个数.再以指数 ...
- 一元多项式的乘法与加法运算 【STL-map哈希-map反向迭代器遍历 + 零多项式】
设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...
- 一元多项式的乘法与加法运算(C语言)
输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 输出分2行,分别以指数递降方 ...
- 小白专场-多项式乘法与加法运算-c语言实现
目录 一.题意理解 二.求解思路 三.多项式的表示 3.1 数组 3.2 链表 四.程序框架搭建 五.如何读入多项式 六.如何将两个多项式相加 七.如何将两个多项式相乘 八.如何将多项式输出 一.题意 ...
随机推荐
- MQTT 客户端出现连接订阅等问题时如何排查?
大家好,这是一期社区专题 FAQ.我们整理了近期社区中关注度较高的问题,在这里进行统一汇总解答. 今后本系列内容将不定期推送,敬请关注. 同时,如果大家在使用 EMQX 的过程中遇到问题,欢迎通过以下 ...
- Modern C++ ——constexpr的各种用法
Modern C++ --constexpr的用法 Reference <现代C++语言核心特性解析> 为什么引入constexpr const可以定义常量,但也可以用来定义只读变量.co ...
- Keil51单片机解决数字显示不稳的问题
Keil51单片机解决数字显示不稳的问题 数字显示不稳,就是我们人眼的特点决定的,0.1秒的残留现象,低于这个值人眼发现不了其中变化,大于这个值就会出现同一个数字闪烁的现象.解决的方法就是所有数字,第 ...
- linux中的环境变量/etc/profile /etc/bashrc ~/.bash_profile ~/.bashrc
来源:https://blog.csdn.net/zzhongcy/article/details/108663751 /etc/profile ============ 此文件为系统的每个用户设置环 ...
- centos 绑定多ip
复制ifcfg-ens192 文件,为 ifcfg-ens192:0 修改ip 和 device 为 "ens192:0",其他不变,service network restart ...
- tvm中使用了xgboost库中的_fmt_metric
_fmt_metric这个xgboost的回调函数已经被遗弃了. 为了能跑起来tvm,可以pip install xgboost==1.5.0
- ICPC2020 World Final
ICPC2020 WF C 洛谷 题意:给定矩形区域左下角\((0,0)\),右上角\((dx,dy)\),其中\(2<=dx,dy<=10^5\),在矩形区域有\(n(n<=100 ...
- 看K线学炒股(8.5)
郑煤机,这只票之前我亏损拿着,昨日理性分析是要打开上涨空间了,毕竟下半年要挖煤,挖煤要煤机,业绩预期就不会差.好了,亏损票,昨日大涨,清了一些,今日大涨八个点清仓.既然分析是打开上涨空间了,那就应该是 ...
- 像MIUI一样做Zabbix二次开发(5)——那些坑和优化方向
踩过的那些坑 从2011年开始玩Zabbix,踩过的坑着实不少,被研发的同事吐了无数槽,所谓"情到深度又爱又恨".以下简述印象比较深刻的几个坑: 二次开发的方式:2011刚开始做的 ...
- APP数据指标体系分析
一.APP的数据指标体系主要分为五个维度,包括用户规模与质量.参与度分析.渠道分析.功能分析和用户属性分析. 1.用户规模和质量 用户规模和质量是APP分析最重要的维度,其指标也是相对其他维度最多,数 ...