1002. A+B for Polynomials (25)
2016-07-27 22:05
447 查看
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
思路:一开始的思路是用链表解决。霹雳巴拉写了一百多行代码,递交,只通过两个测试点。。。仔细一看题目,最多就是1000项。。。可能。。。用数组实现更简单。。。如果在考场写链表的话,还是要一定的熟练度的。。。
查看别人更加快捷的解法,果然用数组在时间上更加经济,空间上可能会浪费一些。
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
思路:一开始的思路是用链表解决。霹雳巴拉写了一百多行代码,递交,只通过两个测试点。。。仔细一看题目,最多就是1000项。。。可能。。。用数组实现更简单。。。如果在考场写链表的话,还是要一定的熟练度的。。。
#include<stdio.h> #include<stdlib.h> typedef struct Node *PtrToNode; typedef PtrToNode Polynomial; typedef PtrToNode Position; struct Node { int Exp; float Coe; Position Next; }; Polynomial Read_Polynomial ( void ); Position Creat_a_PolynomialNode ( void ); Position Find_the_PolynomialLast ( Polynomial P ); Position Attach_to_Polynomial( Polynomial P, Position TmpCell ); Position Find_the_last( Polynomial P ); void Print_Polynomial ( Polynomial P ); Position Add_Polynomial ( Polynomial P1, Polynomial P2 ); int Count_Item ( Polynomial P ); int main ( void ) { Polynomial P1 = NULL; P1 = Read_Polynomial ( ); Polynomial P2 = NULL; P2 = Read_Polynomial( ); Polynomial P3 = Add_Polynomial( P1, P2 ); int count = Count_Item( P3 ); printf("%d ", count ); Print_Polynomial( P3 ); return 0; } Polynomial Read_Polynomial ( ) { int N = 0; scanf("%d", &N ); Polynomial P = NULL; while ( N-- ){ int temp_exponent = 0; float temp_coefficient = 0; scanf("%d", &temp_exponent ); scanf("%f", &temp_coefficient ); Position TmpCell = Creat_a_PolynomialNode ( ); TmpCell->Exp = temp_exponent; TmpCell->Coe = temp_coefficient; TmpCell->Next = NULL; P = Attach_to_Polynomial ( P, TmpCell ); } return P; } Position Creat_a_PolynomialNode ( void ) { Position P = ( Position ) malloc ( sizeof ( struct Node ) ); return P; } Position Attach_to_Polynomial( Polynomial P, Position TmpCell ) { Position last = P; if ( last ){ last = Find_the_last( P ); last->Next = TmpCell; }else { P = TmpCell; } return P; } Position Find_the_last( Polynomial P ) { Position last = P; while ( last->Next ){ last = last->Next; } return last; } void Print_Polynomial ( Polynomial P ) { Position Temp_P = P; while ( Temp_P ){ if ( Temp_P->Next ){ printf("%d %.1f ", Temp_P->Exp, Temp_P->Coe); Temp_P = Temp_P->Next; }else { printf("%d %.1f", Temp_P->Exp, Temp_P->Coe); Temp_P = Temp_P->Next; } } } Position Add_Polynomial ( Polynomial P1, Polynomial P2 ) { Polynomial P = NULL; while( P1 && P2 ){ if ( P1->Exp > P2->Exp ){ Position temp = Creat_a_PolynomialNode(); temp->Exp = P1->Exp; temp->Coe = P1->Coe; temp->Next = NULL; P = Attach_to_Polynomial(P, temp); P1 = P1->Next; }else if ( P1->Exp == P2->Exp ){ Position temp = Creat_a_PolynomialNode(); temp->Exp = P1->Exp; temp->Coe = P1->Coe; temp->Next = NULL; P = Attach_to_Polynomial(P, temp); P1 = P1->Next; P2 = P2->Next; }else if ( P1->Exp < P2->Exp){ Position temp = Creat_a_PolynomialNode(); temp->Exp = P2->Exp; temp->Coe = P2->Coe; temp->Next = NULL; P = Attach_to_Polynomial(P, temp); P2 = P2->Next; } } if ( P1 ){ Position last = Find_the_last( P ); last->Next = P1; } if ( P2 ){ Position last = Find_the_last( P ); last->Next = P2; } return P; } int Count_Item ( Polynomial P ) { int count = 0; Position Temp_P = P; while ( Temp_P){ count++; Temp_P = Temp_P->Next; } return count; }
查看别人更加快捷的解法,果然用数组在时间上更加经济,空间上可能会浪费一些。
#include<stdio.h> double coefficient[1001]; int main() { int i,count=0,n,index; double temp; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d%lf",&index,&temp); coefficient[index]+=temp; } scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d%lf",&index,&temp); coefficient[index]+=temp; } for(i=1000;i>=0;i--) { if(coefficient[i]!=0) { count++; index=i; } } if(count>0) { printf("%d ",count); for(i=1000;i>index;i--) { if(coefficient[i]!=0) printf("%d %.1lf ",i,coefficient[i]); } printf("%d %.1lf",i,coefficient[i]); } else printf("%d",count); }
相关文章推荐
- 【HDU 5758】Explorer Bo(树型dp)
- hadoop基础----hadoop实战(一)-----hadoop环境安装---手动安装官方1.0版本
- Java类型相互转换byte[]类型,blob类型
- django简单入门
- 【代码分享】分享基于openwrt的PandoraBox路由器的dnsmasq.conf配置代码
- 【趣题】NKOJ 3730 wjj的子集序列
- 建立本地svn库
- 结合源码和日志分析 mesos agent recover 过程
- opencv直方图该怎么画
- linux基础(8)-文件处理(awk 、sed、grep)
- VGG-19 和 VGG-16 的 prototxt文件
- Hibernate一对多单向,多对一单向,多对一双向关联
- Lync Sever 安装排错&删除Lync拓扑重新发布 推荐
- win7 设置启用remote control 设置方法
- tjut 4631
- 分享一篇Android自定义Toast的文章——很简单哦
- 配置参数详解(主要是%ZOOKEEPER_HOME%/conf/zoo.cfg文件)
- Android中的Context
- 微信公众号个性化菜单
- java中内存的主要划分