您的位置:首页 > 其它

一元多项式相加

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秒1024KB0
测试用例 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秒1024KB0
测试用例 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秒1024KB0
#include<stdio.h>
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: