标签:cti key code 测试 man 注意 去除 push 重复
This time, you are supposed to find A+B where A and B are two polynomials.
Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:
K N?1?? a?N?1???? N?2?? a?N?2???? ... N?K?? a?N?K????
where K is the number of nonzero terms in the polynomial, N?i?? and a?N?i???? (i=1,2,?,K) are the exponents and coefficients, respectively. It is given that 1≤K≤10,0≤N?K??<?<N?2??<N?1??≤1000.
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.
2 1 2.4 0 3.2
2 2 1.5 1 0.5
3 2 1.5 1 2.9 0 3.2
多项式求和
输入为两行 一个多项式的项数k 然后给出k组 e次幂 和 a系数
输出一行 同样 多项式项数k k组 e次幂 和 a系数
本身不难,但是要注意 当同幂次系数相加 和为0 时,需要删除这一项
这里用的是map<int,double>int 是幂,double是值 , 直接删除 key-value 键值对, 用map.erase(iterator);参数为指向key的迭代器
测试点 3 4 5 6 当最终结果没有数据的时候, 只输出项数 0 即可, 不需要输出多项式
附一个来自其他同学的测试用例https://blog.csdn.net/han_hhh/article/details/106338514
input 0 0 output 0 input 1 1000 1.5 0 output 1 1000 1.5 input 1 1000 1.5 1 1000 -1.5 output 0 input 2 1000 1.5 500 1.5 1 1000 -1.5 output 1 500 1.5
AC后 去除了重复多余代码的版本
#include <iostream> #include <vector> #include <map> #include <iomanip> using namespace std; void getPolynomial(map<int,double> &a){ int k,ni; double ai; cin >> k; map<int,double>::iterator it; for(int i=0;i<k;i++){ cin >> ni >> ai; a[ni]+=ai; if(a[ni]==0) { it=a.find(ni); a.erase(it); } } } int main(){ map<int,double>::iterator it; map<int,double> polynomial; vector<int> ni; vector<double> ai; getPolynomial(polynomial); getPolynomial(polynomial); for(it=polynomial.begin();it!=polynomial.end();it++){ ni.push_back(it->first); ai.push_back(it->second); } cout << ai.size(); cout.setf(ios::fixed); for(int i=ni.size()-1;i>=0;i--){ cout << " "<< ni[i]<<" "<< setprecision(1) <<ai[i]; } return 0; }
第一次提交
//多项式求和 #include <iostream> #include <vector> #include <map> #include <iomanip> using namespace std; void getPolynomial(map<int,double> &poly){ int k,ni; double ai; cin >> k; for(int i=0;i<k;i++){ cin >> ni >> ai; poly[ni]=ai; } } void aplusb(map<int,double> &a,map<int,double>&b){ map<int,double>::iterator it; map<int,double>::iterator itb; for(it=a.begin();it!=a.end();it++){ itb=b.find(it->first); b[it->first]+=it->second; if(b[it->first]==0) { b.erase(itb); } } } int main(){ map<int,double>::iterator it; map<int,double> polynomial1; map<int,double> polynomial2; map<int,double> result; vector<int> ni; vector<double> ai; getPolynomial(polynomial1); getPolynomial(polynomial2); aplusb(polynomial1, result); aplusb(polynomial2, result); for(it=result.begin();it!=result.end();it++){ ni.push_back(it->first); ai.push_back(it->second); } cout << ai.size(); cout.setf(ios::fixed); for(int i=ni.size()-1;i>=0;i--){ cout << " "<< ni[i]<<" "<< setprecision(1) <<ai[i]; } return 0; }
PAT Advanced 1002 A+B for Polynomials (25 分) c++语言实现(g++)
标签:cti key code 测试 man 注意 去除 push 重复
原文地址:https://www.cnblogs.com/ichiha/p/14771082.html