1002. A+B for Polynomials (25)
题目链接: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)的更多相关文章
- PAT 1002. A+B for Polynomials (25) 简单模拟
1002. A+B for Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue T ...
- 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 ...
- 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 ...
- 【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 ...
- 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 ...
- PAT 甲级1002 A+B for Polynomials (25)
1002. A+B for Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue T ...
- 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 ...
- 甲级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 ...
- 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 ...
随机推荐
- Ubuntu16.04安装有道词典
1.首先需要安装依赖包gstreamer0.10-plugins-ugly_0.10.19-2.1_amd64.deb,但是该依赖包 仍有两个依赖包需要提前安装,这三个依赖包都可以从这里下载 下载之后 ...
- SQL多表查询,消除表中的重复的内容
看到朋友再写一个SQL语句:两个表a1表中有SN.SN2.TN,b1表有SM.SM2.TN2,若a1的SN中的数据和b1的SM中的数据是一致的,那么将a1中对应的数据修改成b1中对应的数据. upda ...
- Python下Json和Msgpack序列化比较
最近用Python时,遇到了序列化对象的问题,传统的json和新型序列化工具包msgpack都有涉及,于是做一个简单的总结: 通俗的讲:序列化:将对象信息转化为可以存储或传输的形式:反序列化:把这个 ...
- 请慎用java的File#renameTo(File)方法
转载地址:http://xiaoych.iteye.com/blog/149328 以前我一直以为File#renameTo(File)方法与OS下面的 move/mv 命令是相同的,可以达到改名.移 ...
- AngularJS 路由
AngularJS 路由允许我们通过不同的 URL 访问不同的内容. 通过 AngularJS 可以实现多视图的单页Web应用(single page web application,SPA). 通常 ...
- gulp使用过程中出现的问题
在使用gulp的过程中,最容易出现错误的地方就是在安装本地的gulp的时候,错误的原因有: 1.本来是局部安装gulp,但使用命令时还带-g. 2.忘记在局部安装gulp. 以上两种情况出错时会报错, ...
- jsf初学数据表(DataTable)的绑定
来看看简单的datatable例子: faces: <h:form> <h:dataTable value="#{tableData.names}" var=&q ...
- [BI项目记]-BUG处理
BUG是在项目过程中以及运维过程中经常遇到的工作项.在处理每一个BUG的过程中,通过项目管理系统把BUG相应的内容纪录下来也是很重要的.这里将介绍如何通过TFS来完成BUG的处理工作. 首先看一下BU ...
- Java Spring的IoC和AOP的知识点速记
Spring简介 Spring解决的最核心的问题就是把对象之间的依赖关系转为用配置文件来管理,这个是通过Spring的依赖注入机制实现的. Spring Bean装配 1. IOC的概念以及在Spri ...
- 使用PowerShell来修改文件访问,创建,修改时间属性
Function Set-FileTimeStamps { Param ( [Parameter(mandatory=$true)] [string[]]$path, [datetime]$date ...