题目:http://pat.zju.edu.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 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<iostream> #include<string.h> using namespace std; #define max 1000 double input[max + 1]; int main() { int k,count; int i,expo; double coef; scanf("%d",&k); memset(input,0,sizeof(input)); for(i=0; i<k; i++) { scanf("%d %lf",&expo,&coef); input[expo] += coef; } cin>>k; for(i=0; i<k; i++) { scanf("%d %lf",&expo,&coef); input[expo] += coef; } count = 0; for(i=1000; i>=0; i--) if(input[i] != 0) count++; printf("%d",count); for(i=1000; i>=0; i--) if(input[i] != 0.0) printf(" %d %.1lf",i,input[i]); cout<<endl; return 0; }
以上代码,在最后输出的时候,还是要从1000遍历到0。这其中可能很多都是空的,浪费了遍历时间。所以把输出进行了修改,写了一份新的代码如下:
#include<iostream> #include<stack> #include<string.h> using namespace std; #define max 1001 double arrayA[max]; struct Node{ Node(int e, double c){ exp = e; coe = c; } int exp; double coe; }; int main(){ int cntA, i, exp; double coe; memset(arrayA,0,sizeof(arrayA)); cin>>cntA; for(i=0; i<cntA; i++){ cin>>exp>>coe; arrayA[exp] = coe; } cin>>cntA; for(i=0; i<cntA; i++){ cin>>exp>>coe; arrayA[exp] += coe; } int cnt = 0; stack<Node> sta; for(i=0; i<max; i++){ if(arrayA[i] != 0){ Node n(i,arrayA[i]); sta.push(n); } } cout<<sta.size(); if(sta.size() != 0){ while(!sta.empty()){ printf(" %d %.1lf", sta.top().exp, sta.top().coe); sta.pop(); } } cout<<endl; return 0; }