成绩 | 10 | 开启时间 | 2021年09月17日 星期五 00:00 |
折扣 | 0.8 | 折扣时间 | 2021年09月30日 星期四 23:55 |
允许迟交 | 否 | 关闭时间 | 2021年10月10日 星期日 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各项的系数(整数)、指数(整数)
- 0 ---操作终止,退出。
输出:
对应一组输入,输出一次操作的结果(参见测试用例)。
- 1 多项式输出格式:以指数递增的顺序输出: <系数,指数>,<系数,指数>,<系数,指数>,参见测试用例。零多项式的输出格式为<0,0>
- 0 无输出
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
测试用例 1 |
|
| 1秒 | 1024KB | 0 |
测试用例 2 |
|
| 1秒 | 1024KB | 0 |
测试用例 3 |
|
| 1秒 | 1024KB | 0 |
代码
怎么说呢,我被恶心到了,debug了一晚上,感觉自己写的跟学长的差不多,但就是出各种问题,比如没结果、比如多项式多了一项地址项……我被整麻了,感觉和学长写的区别比较大的一点就是学长把头结点置空,从下一个结点开始遍历,而我是直接从头结点遍历的,但我觉得这也不是什么大的区别吧,但就是过不了……
所以这一篇只有AC代码,原理题干已经说了,这题原理还是很好理解的,就不多赘述了
#include"stdio.h"
#include"stdlib.h"
typedef struct a{
int di;
int mi;
struct a *next;
}a,*linka;
void create(linka &h){
int n;
scanf("%d",&n);
linka p;
h=(linka)malloc(sizeof(linka));
p=h;
int i;
int a,b;
for(i=0;i<n;i++){
scanf("%d %d",&a,&b);
p->next=(linka)malloc(sizeof(linka));
p=p->next;
p->di=a;
p->mi=b;
}
p->next=NULL;
}
void print(linka &head){
linka p;
p=head->next;
if(p==NULL){
printf("<0,0>\n");
return;
}
else{
printf("<%d,%d>",p->di,p->mi);
p=p->next;
}
while(p){
printf(",<%d,%d>",p->di,p->mi);
p=p->next;
}
printf("\n");
}
void add(linka &la,linka &lb){
int sum=0;
linka a,b;
a=la->next;
b=lb->next;
linka cur,q;
cur=la;
while(a!=NULL&&b!=NULL){
if(a->mi<b->mi){
cur=a;
a=a->next;
}
else if(a->mi==b->mi){
sum=a->di+b->di;
if(sum==0){
q=a->next;
free(a);
a=q;
cur->next=q;
}
else{
a->di=sum;
cur=a;
a=a->next;
}
q=b;
b=b->next;
free(q);
}
else{
q=b->next;
b->next=a;
cur->next=b;
cur=b;
b=q;
}
}
if(b){
cur->next=b;
}
}
int main()
{
int N;
while(scanf("%d",&N)!=EOF)
{
if(N==0)
break;
linka pa,pb,pc;
create(pa);
create(pb);
create(pc);
print(pa);
print(pb);
print(pc);
add(pa,pb);
print(pa);
add(pa,pc);
print(pa);
}
return 0;
}