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 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 Input2 1 2.4 0 3.2 2 2 1.5 1 0.5Sample Output
3 2 1.5 1 2.9 0 3.2
分析:很简单的题,感觉写复杂了,主要在情况的分类上处理的不好
#include<stdio.h> #include<stdlib.h> typedef struct NODE *PtrN; struct NODE { int exp; float coe; PtrN Next; }; int main() { int n1, n2; int i, j,k=0; PtrN P1, P2, tmp,tp,th,head; P1 = (PtrN)malloc(sizeof(struct NODE)); P1->Next = NULL; tmp = P1; scanf( "%d", &n1); for (i = 0; i < n1; i++) { tmp->Next = (PtrN)malloc(sizeof(struct NODE)); tmp = tmp->Next; scanf( "%d %f", &tmp->exp, &tmp->coe); tmp->Next = NULL; } P2 = (PtrN)malloc(sizeof(struct NODE)); P2->Next = NULL; tmp = P2; scanf( "%d", &n2); for (i = 0; i < n2; i++) { tmp->Next = (PtrN)malloc(sizeof(struct NODE)); tmp = tmp->Next; scanf( "%d %f", &tmp->exp, &tmp->coe); tmp->Next = NULL; } head = (PtrN)malloc(sizeof(struct NODE)); head->Next = NULL; th = head; tmp = P1->Next; tp = P2->Next; while (tmp != NULL&&tp != NULL) { if (tmp->exp == tp->exp) { if (tmp->coe + tp->coe != 0) { th->Next = (PtrN)malloc(sizeof(struct NODE)); th = th->Next; th->Next = NULL; th->exp = tmp->exp; th->coe = tmp->coe + tp->coe; tmp = tmp->Next; tp = tp->Next; k++; } else { tmp = tmp->Next; tp = tp->Next; } } else if (tmp->exp > tp->exp) { if (tmp->coe != 0) { th->Next = (PtrN)malloc(sizeof(struct NODE)); th = th->Next; th->Next = NULL; th->exp = tmp->exp; th->coe = tmp->coe; tmp = tmp->Next; k++; } else tmp = tmp->Next; } else { if (tp->coe != 0) { th->Next = (PtrN)malloc(sizeof(struct NODE)); th = th->Next; th->Next = NULL; th->exp = tp->exp; th->coe = tp->coe; tp = tp->Next; k++; } else tp = tp->Next; } } while (tmp != NULL) { th->Next = (PtrN)malloc(sizeof(struct NODE)); th = th->Next; th->Next = NULL; th->exp = tmp->exp; th->coe = tmp->coe; tmp = tmp->Next; k++; } while (tp != NULL) { th->Next = (PtrN)malloc(sizeof(struct NODE)); th = th->Next; th->Next = NULL; th->exp = tp->exp; th->coe = tp->coe; tp = tp->Next; k++; } printf("%d", k); th = head->Next; while (th!= NULL) { if(th->coe!=0)printf(" %d %.1f", th->exp, th->coe); th = th->Next; } return 0; }