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 ...
随机推荐
- 编译器--__attribute__ ((packed))
1. __attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法.这个功能是跟操作系统没关系,跟编译器有关,g ...
- MySQL--InnoDB索引原理详解
1 各种树形结构 本来不打算从二叉搜索树开始,因为网上已经有太多相关文章,但是考虑到清晰的图示对理解问题有很大帮助,也为了保证文章完整性,最后还是加上了这部分. 先看看几种树形结构: 1 搜索二叉树: ...
- Vi命令备忘
备忘 Ctrl+u:向文件首翻半屏: Ctrl+d:向文件尾翻半屏: Ctrl+f:向文件尾翻一屏: Ctrl+b:向文件首翻一屏: Esc:从编辑模式切换到命令模式: ZZ:命令模式下保存当前文件所 ...
- mvc file控件无刷新异步上传操作
前言 上传文件应该是很常见必不可少的一个操作,网上也有很多提供的上传控件.今天遇到一个问题:input控件file无法进行异步无刷新上传.真真的感到别扭.所以就尝试这去处理了一下.主要分三个部分:上传 ...
- python之路:Day03 --- Python基础3 >>函数
本节内容 1.函数基本语法及特性 2.参数 3.局部变量与全局变量 4.返回值 嵌套函数 5.递归 6.匿名函数 7.高阶函数 8.内置函数 一.函数基本语法及特性 区别 面向过程编程:根据业务逻辑从 ...
- curl的用法以及个人理解(php)
php curl的个人理解 1.首先curl的官方解释为:curl是利用URL语法在命令行方式下工作的开源文件传输工具.{它只是一种传输工具!} 2.curl就是抓取网页的升级版本,支持POST.GE ...
- AVL Insight 开源情报工具:一站式情报管理服务
一.概要 AVL Insight 开源情报工具是安天移动安全推出的一款情报收集工具,它是配合AVL Insight移动威胁情报平台的Chrome浏览器扩展程序,用户可以使用该工具,对网站中的公开信息进 ...
- oracle undo回滚段详解
1.Undo是干嘛用的? 在介绍undo之前先说一下另外一个东西 transaction ,翻译成交易或事务.我们在进行一个事务的过程中需要申请许多资源,一个复杂的事务也需要很多步来完成.那么一个 ...
- Xocde一次版本升级遇到的问题 (Code Sign Error)
因为Xcode对ios版本的支持问题,我对XCode进行了一次升级,导致原来还好的项目代码出现了编译时错误. Code Sign Error failed with exit code 1 问题就在于 ...
- 自连接<EntityFramework6.0>
自引用 public class PictureCategory { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int ...