This time, you are supposed to find A+B where A and B are two polynomials.
Input Specification: 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.
Output Specification: 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这道题一开始根本没看懂什么意思,现在其实都不是很懂,但知道怎么做,把指数相同的系数相加,然后按指数递减的顺序输出。 一开始用了map,后面不会反向遍历map,然后还是乖乖用了数组 因为是小数,所以用的是float数组,输出当然也要注意是.1f,判断也是用0.0来判断 https://zhidao.baidu.com/question/139040882608359725.html 顺便贴一个double和float的区别 https://zhidao.baidu.com/question/418125274.html
#include<iostream> #include<cstdio> using namespace std; int main(){ float hash[1010] = {0}; int n, m, z, num = 0; float x; cin>>n; for(int i = 0; i < n; i++){ cin >> z >> x; hash[z] += x; } cin>>m; for(int i = 0; i < m; i++){ cin >> z >> x; hash[z] += x; } for(int i = 0; i < 1001; i++){ if(hash[i] != 0) num++; } cout << num; for(int i = 1001; i >= 0; i--){ if(hash[i] != 0.0){ printf(" %d %.1f", i, hash[i]); } } cout << endl; return 0; }