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 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 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
题目大意:计算多项式A+B的和
可以输入重复的项:同一个多项式里,可能有没有合并的、指数相同的项
输入的项相加后可能为0,此时项数减1
当项目为0时,只输出项数,不要加空格
输出最后一项不要加空格
最终的结果多项式项数最多为20
系数为负数时要输出
题目要求Please be accurate to 1 decimal place,需要一位小数
setprecision、fixed、showpoint的用法总结
//错误//
/*#include <string>
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double a[10086] = {};
double x;//非零项项数
double flag=0;//记录最大项
int i;//某项
double t;//某值
double maxaflag=0;
for (int step = 0; step < 2; step++) {
cin >> x;
for (int j = 0; j < x; j++) {
cin >> i;
cin >> t;
a[i] += t;
if (i >= flag) {
flag = i;
maxaflag = a[i];
}
}
}
if (flag ==0&&a[0]==0) {
cout << 0;
}
else {
if (maxaflag != 0) {
cout << flag + 1 << " ";
}
else {
cout << flag << " ";
}
for (int j = flag; j > 0; j--) {
if (a[j] != 0.0) {
cout << j << " " << setiosflags(ios::fixed) << setprecision(1) << a[j] << " ";
}
}
if (a[0] != 0.0) {
cout << 0 << " " << setiosflags(ios::fixed) << setprecision(1) << a[0];
}
}
return 0;
}
*/
/ /
/ /
/ /
/ /
/ /
/ /
/ /
//正确且简洁//
#include <stdio.h>
#include<string.h>
int main()
{
float a[1001];
int i,k;
float temp;
// 初始化数组
for(i = 0; i <= 1000; i++){
a[i] = 0.0f;
}
// 分别输入两个多项式
scanf("%d", &k);
while(k--){
scanf("%d%f", &i, &temp);
a[i] += temp;
}
scanf("%d", &k);
while(k--){
scanf("%d%f", &i, &temp);
a[i] += temp;
}
// 判断当前多项式的项数
k = 0;
for(i = 0; i <= 1000; i++){
if(a[i]!=0.0){
k++;
}
}
printf("%d", k);
// 项数为0则只输出k,且不带空格
if(k != 0)
printf(" ");
for(i=1000; i >= 0; i--){
if(a[i]!=0.0){
printf("%d ", i);
printf("%0.1f", a[i]);
k--;
// 输出最后一项后不带空格
if(k != 0)
printf(" ");
}
}
return 0;
}