一元多项式相加
2018-01-09 16:04
211 查看
成绩 | 10 | 开启时间 | 2017年09月27日 星期三 00:00 |
折扣 | 0.8 | 折扣时间 | 2017年10月20日 星期五 23:55 |
允许迟交 | 否 | 关闭时间 | 2018年01月8日 星期一 23:55 |
题目说明:
编写一元多项式加法运算程序。要求用线性链表存储一元多项式(参照课本)。该程序有以下几个功能:1. 多项式求和
输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc
(提示:调用CreatePolyn(polynomial &P,int m)。
输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc
(提示:调用AddPolyn(polynomial
&Pa, polynomial Pb), 调用PrintPolyn(polynomial P))。
0. 退出
输入:
根据所选功能的不同,输入格式要求如下所示(第一个数据是功能选择编号,参见测试用例):1
多项式A包含的项数,以指数递增的顺序输入多项式A各项的系数(整数)、指数(整数)
多项式B包含的项数,以指数递增的顺序输入多项式B各项的系数(整数)、指数(整数)
多项式C包含的项数,以指数递增的顺序输入多项式C各项的系
4000
数(整数)、指数(整数)
0 ---操作终止,退出。
输出:
对应一组输入,输出一次操作的结果(参见测试用例)。1 多项式输出格式:以指数递增的顺序输出:
<系数,指数>,<系数,指数>,<系数,指数>,参见测试用例。零多项式的输出格式为<0,0>
0 无输出
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示 1↵ 2↵ 1 1 2 2↵ 2↵ 1 1 2 2↵ 2↵ 1 1 2 2↵ | 以文本方式显示 <1,1>,<2,2>↵ <1,1>,<2,2>↵ <1,1>,<2,2>↵ <2,1>,<4,2>↵ <3,1>,<6,2>↵ | 1秒 | 1024KB | 0 |
测试用例 2 | 以文本方式显示 1↵ 2↵ 6 3 8 6↵ 2↵ 3 4 4 8↵ 3↵ 1 1 5 5 9 9↵ | 以文本方式显示 <6,3>,<8,6>↵ <3,4>,<4,8>↵ <1,1>,<5,5>,<9,9>↵ <6,3>,<3,4>,<8,6>,<4,8>↵ <1,1>,<6,3>,<3,4>,<5,5>,<8,6>,<4,8>,<9,9>↵ | 1秒 | 1024KB | 0 |
测试用例 3 | 以文本方式显示 1↵ 2↵ 1 1 2 2↵ 2↵ -1 1 -2 2↵ 2↵ 1 1 2 2↵ | 以文本方式显示 <1,1>,<2,2>↵ <-1,1>,<-2,2>↵ <1,1>,<2,2>↵ <0,0>↵ <1,1>,<2,2>↵ | 1秒 | 1024KB | 0 |
#include<stdlib.h>
#define LEN sizeof(struct node)
typedef struct node
{
int coef;
int exp;
struct node *next;
}*polynomial, Polynomial;
CreatePolyn(polynomial P, int m)
{
polynomial p1=P;
for (int i = 0; i < m; i++)
{
polynomial pnew = (polynomial)malloc(LEN);
scanf("%d %d", &pnew->coef, &pnew->exp);
p1->next = pnew;
p1 = pnew;
}
p1->next = NULL;
}
PrintPolyn(polynomial P)
{
polynomial tmp = P->next;
if (tmp== NULL)
{
printf("<0,0>\n");
}
else
{
while (tmp->next)
{
printf("<%d,%d>,", tmp->coef, tmp->exp);
tmp = tmp->next;
}
printf("<%d,%d>\n", tmp->coef, tmp->exp);
}
}
AddPolyn(polynomial Pa, polynomial Pb)
{
polynomial ha = Pa, hb = Pb, qa = ha->next, qb = hb->next; int a, b;
while (qa&&qb)
{
a = qa->exp, b = qb->exp;
if (a < b)
{
ha = qa; qa = qa->next;
}
else if (a == b)
{
int sum = qa->coef+ qb->coef;
if (sum != 0)
{
qa->coef = sum; ha = qa;
}
else
{
ha->next = qa->next; free(qa);
}
hb->next = qb->next; free(qb); qb = hb->next; qa = ha->next;
}
else if (a>b)
{
hb->next = qb->next;
ha->next = qb;
qb->next = qa;
qb = hb->next;
ha = ha->next;
}
}
if (qb != NULL)
{
while (qb != NULL)
{
polynomial pnew = (polynomial)malloc(LEN);
pnew->coef = qb->coef;
pnew->exp = qb->exp;
pnew->next = NULL;
ha->next = pnew;
ha = ha->next;
qb = qb->next;
}
}
}
int main()
{
//freopen("5.txt", "r", stdin);
int cmd; int num;
while (scanf("%d", &cmd) != EOF)
{
if (cmd == 0)
break;
Polynomial pa, pb, pc;
pa.next = NULL, pb.next = NULL, pc.next = NULL;
scanf("%d", &num); CreatePolyn(&pa, num);
scanf("%d", &num); CreatePolyn(&pb, num);
scanf("%d", &num); CreatePolyn(&pc, num);
PrintPolyn(&pa); PrintPolyn(&pb); PrintPolyn(&pc);
AddPolyn(&pa,&pb);
PrintPolyn(&pa);
AddPolyn(&pa, &pc);
PrintPolyn(&pa);
}
return 0;
}
相关文章推荐
- c语言版数据结构(奇迹冬瓜)-链表实战(3)解升序排列的一元多项式相加
- 单链表实现一元多项式相加
- 一元多项式的表示及相加
- 南邮数据结构实验1.3 一元多项式的相加和相乘
- 用单链表表示一元多项式及相加相减相乘运算
- 一元多项式的表示及相加
- 重学数据结构001——链表基本操作与一元多项式相加
- 利用单链表实现一元多项式的表示及相加
- 一元多项式相加
- 一元多项式的表示及相加
- 【重学数据结构】一元多项式的表示及相加
- 线性表4--一元多项式相加
- 数据结构学习笔记 --- 线性表 (一元多项式的表示及相加)
- 一元多项式相加
- 一元多项式的表示及相加 数据结构
- 线性表---一元多项式相加
- 一元多项式相加-链表应用
- 数据结构 一元多项式的创建、显示、相加、相减、相乘
- 一元多项式相加(无头结点,c++)
- 用链式线性表实现两个一元多项式相加