题目链接:https://www.patest.cn/contests/pat-a-practise/1002

原题如下:

This time, you are supposed to find A+B where A and B are two polynomials.

Input

Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N1 aN1 N2 aN2 ... NK aNK, where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1, 2, ..., K) are the exponents and coefficients, respectively. It is given that 1 <= K <= 10,0 <= NK < ... < N2 < N1 <=1000.

Output

For each test case you should output the sum of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.

Sample Input

2 1 2.4 0 3.2
2 2 1.5 1 0.5

Sample Output

3 2 1.5 1 2.9 0 3.2
__________________________________________________________________________________________________________________________________________________
  这道题我感觉就是一元多项式的加法,因此用了之前文章中的方法,集用两个链表分别存储两行元素,每次比较然后相加,可是有三个测试点超时了……代码如下:
 #include<stdio.h>
#include<stdlib.h> typedef struct Node{
struct Node *Next;
int expon;
float coef;
}PNode; void Insert(PNode *P,PNode **PtrRear)
{
//printf("er");
PNode *tmp=(PNode *)malloc(sizeof(struct Node));
tmp->expon=P->expon;tmp->coef=P->coef;tmp->Next=NULL;
(*PtrRear)->Next=tmp;
*PtrRear=tmp;
//printf("sd");
return ;
} PNode * ReadP(int K)
{
int i,e;
float c;
PNode *P1=(PNode *)malloc(sizeof (struct Node)); P1->Next=NULL;
PNode *tmp=(PNode *)malloc(sizeof (struct Node));tmp->Next=NULL;
tmp=P1;
for (i=;i<K;i++)
{
scanf("%d %f",&e, &c);
PNode *P=(PNode*)malloc(sizeof (struct Node));
P->expon =e;P->coef=c;P->Next=NULL;
P1->Next=P;
P1=P;
}
tmp=tmp->Next; return tmp;
} int main()
{
int K1,K2,i;
PNode *rear,*front,*tmp;
rear=(PNode *)malloc(sizeof (struct Node));front=rear;
PNode *P1=(PNode *)malloc(sizeof (struct Node));
PNode *P2=(PNode *)malloc(sizeof (struct Node)); scanf("%d",&K1);P1=ReadP(K1);
scanf("%d",&K2);P2=ReadP(K2); //printf("\n%d %.1lf %d %.1lf",P1->expon,P1->coef,P1->Next->expon,P1->Next->coef); printf("\n%d %.1lf %d %.1lf\n",P2->expon,P2->coef,P2->Next->expon,P2->Next->coef); int cnt=;
while (P1 && P2)
{
if (P1->expon>P2->expon)
{
Insert(P1,&rear);
P1=P1->Next;
cnt++;
}
else if (P1->expon<P2->expon)
{
Insert(P2,&rear);
P2=P2->Next;
cnt++;
}
else if (P1->expon==P2->expon)
{
if (P1->coef+P2->coef)
{
PNode *tmp=(PNode *)malloc(sizeof (struct Node));
tmp->expon=P1->expon;tmp->coef=P1->coef+P2->coef;
tmp->Next=NULL;
Insert(tmp,&rear);
P1=P1->Next;P2=P2->Next;
cnt++;
}
}
}
while (P1){Insert(P1,&rear);P1=P1->Next;cnt++;}
while (P2){Insert(P2,&rear);P2=P2->Next;cnt++;} int flag=;
tmp=front;
front=front->Next;
while (front)
{
if (!flag)
{printf("%d %d %.1f",cnt,front->expon,front->coef);front=front->Next;flag=;}
else
{
printf(" %d %.1f",front->expon,front->coef);front=front->Next;
}
}
free(tmp);
return ;
}

希望哪位朋友能帮忙看下问题在哪……

在网上看了其他人的代码,真是简单精妙啊,直接开一个数组,指数即为数值下标,每个数组的值即为相应的每个指数对应系数的值,代码如下:

#include<stdio.h>
#define MaxN 1001 int main()
{
int K,i,e;
int line=;
int cnt=;
int Maxe=;
double Input[MaxN]={};
double c;
while (line)
{scanf("%d",&K);
for (i=;i<K;i++)
{
scanf("%d %lf",&e,&c);
Input[e]+=c;
if (e>Maxe)Maxe=e;
}
line--;
} for (i=Maxe;i>=;i--)
{
if (Input[i]!=)cnt++;
} printf("%d",cnt);
for (i=Maxe;i>=;i--)
{
if (Input[i]!=)printf(" %d %.1lf",i,Input[i]);
}
return ;
}

1002. A+B for Polynomials (25)的更多相关文章

  1. PAT 1002. A+B for Polynomials (25) 简单模拟

    1002. A+B for Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue T ...

  2. PAT甲 1002. A+B for Polynomials (25) 2016-09-09 22:50 64人阅读 评论(0) 收藏

    1002. A+B for Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue T ...

  3. 1002 A+B for Polynomials (25)(25 point(s))

    problem 1002 A+B for Polynomials (25)(25 point(s)) This time, you are supposed to find A+B where A a ...

  4. 【PAT】1002. A+B for Polynomials (25)

    1002. A+B for Polynomials (25) This time, you are supposed to find A+B where A and B are two polynom ...

  5. PAT甲级 1002 A+B for Polynomials (25)(25 分)

    1002 A+B for Polynomials (25)(25 分) This time, you are supposed to find A+B where A and B are two po ...

  6. PAT 甲级1002 A+B for Polynomials (25)

    1002. A+B for Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue T ...

  7. PAT (Advanced Level) Practice 1002 A+B for Polynomials (25 分) 凌宸1642

    PAT (Advanced Level) Practice 1002 A+B for Polynomials (25 分) 凌宸1642 题目描述: This time, you are suppos ...

  8. 甲级1002 A+B for Polynomials (25)

    题目描述: This time, you are supposed to find A+B where A and B are two polynomials. Input Each input fi ...

  9. PAT 1002. A+B for Polynomials (25)

    This time, you are supposed to find A+B where A and B are two polynomials. Input Each input file con ...

随机推荐

  1. Winform Textbox控件字体垂直居中

    项目中遇到要求Textbox内的字体垂直居中的问题,在网上找一直没有理想的解决方案.后来发现可以通过设置控件的字体来达到预期的效果. 默认的Textbox的Font属性为 “宋体, 9pt”,效果如下 ...

  2. Sql Server本地高版本备份数据备份至远程低版本数据库方法

    想要将Sqlserver高版本备份的数据还原到低版本SqlServer2008R2上去,但是这在SqlServer中是没法直接还原数据库的,通过以下方法可以顺利还原. 通过高版本生成sql脚本在低版本 ...

  3. Java数据类型和MySql数据类型对应表

  4. UIStackView before iOS9.0

    我用的Xcode8.1,同伴用的Xcode7.3.1,其上传了几个XIB文件,导致我这边项目一直爆红,爆红信息:"UIStackView before iOS9.0".如图: 网上 ...

  5. Web网站的几个并发量级

    评价一个网站的“大小”,处于视角的不同,有很多种衡量的方法,类似文章数,页面数之类的数据非常明显,也没有什么可以争议的.但对于并发来说,争议非常之多,这里就从一个技术的角度开始,谈谈几个Web网站的数 ...

  6. CentOS安装gitLab服务器

    首先利用gitlab-install-el6.sh安装,比较简单: (出处:http://www.linuxidc.com/Linux/2013-06/85754.htm) 1:如果有条件,提供一台全 ...

  7. 使用静态函数impl模式做接口

    使用静态函数impl模式做接口 impl即桥接模式,主要是为了隐藏数据和减少不必要的编译. 普通的impl模式做接口一般是: A类是接口,B类继承A类,是A类的实现,C类,包含A类和B类的头文件,把B ...

  8. 创建Azure DS 虚拟机并附加SSD硬盘

    $subscriptionName = "Windows Azure Enterprise Trial" #订阅名称 $location = "China East&qu ...

  9. C# 通过反射获取扩展方法

    注意,扩展方法本质上是静态方法,所以拿到MethodInfo时,应该这么调用 methodInfo.Invoke(null, new object[]{params}) static IEnumera ...

  10. Knockout.js随手记(7)

    数组元素的新增/移除事件 前两篇博客已经很清楚的知道knockout.js通过observableArray()数组元素增减,可以实时的反映在UI上.当然我们想在数组增加或移除元素时加上自定义逻辑就好 ...