这个题坑点在于
一、第一个是在于输出
题目要求的输出是精确到一位小数。所以在输出的时候要控制输出的格式。
而且最后一个结果的输出后面是不能带有空格的。最后一个输出需要单独判定。
二、在于两个多项式
两个多项式系数相加是会有0的情况出现的!!而题目要求输出是不能有0项的。
注意到这两个应该可以敲出代码了。
附上AC代码。
#include <iostream>
#include <vector>
using namespace std;
struct Node
{
int k;
float An;
};
void printvet(vector<Node> & poly);
int main() {
vector<Node> poly1;
vector<Node> poly2;
vector<Node> poly3;
Node temp;
int n1, n2;
cin >> n1;
if (n1 > 500) while (1);
for (int i = 0; i < n1; i++) {
cin >> temp.k;
cin >> temp.An;
poly1.push_back(temp);
}
cin >> n2;
for (int i = 0; i < n2; i++) {
cin >> temp.k;
cin >> temp.An;
poly2.push_back(temp);
}
int j = 0, k = 0;
while (j<poly1.size()&&k<poly2.size())
{
if (poly1[j].k == poly2[k].k) {
poly1[j].An += poly2[k].An;
if(poly1[j].An != 0) //和为0不添加
poly3.push_back(poly1[j]);
j++; k++;
}
else if(poly1[j].k < poly2[k].k)
{
poly3.push_back(poly2[k]);
k++;
}
else
{
poly3.push_back(poly1[j]);
j++;
}
}
while (j <poly1.size())
{
poly3.push_back(poly1[j]);
j++;
}
while (k <poly2.size())
{
poly3.push_back(poly2[k]);
k++;
}
printvet(poly3);
system("pause");
return 0;
}
void printvet(vector<Node> & poly) {//打印函数
if (poly.size() == 0) //多项式为0 只输出0
cout << "0" << endl;
else
cout << poly.size() << " ";
for (int i = 0; i < poly.size(); i++)
{
if (i == poly.size() - 1) { //最后一行不能有空格
printf("%d %.1f", poly[i].k,poly[i].An);
}
else {
printf("%d %.1f", poly[i].k, poly[i].An);
cout << " ";
}
}
}