[pat题解]1002.A+B for Polynomials

pat第二题,给定两个多项式,计算两个多项式相加后的多项式,多项式的给出示例,指数+对应的系数,计算规则是相同指数的系数相加作为新的系数,例如2x^2 + 3x和-x^2 + 3则得到x^2 + 3x + 3。这里需要注意的点有三个,第一要求按指数降序排列,第二精确到小数点后一位,如果计算中出现系数为0,则该项不应该出现在结果中。尤其是第三点如果忘记过滤掉的话,最后一个case会过不去,所以要记得过滤掉系数为0的项。因为给的指数的范围比较小0-1000,所以直接用两个map来记录两个多项式,而且遍历0-1000计算即可,注意计算的同时过滤掉系数为0的项,最后按指数的降序排列输出即可。

c++代码如下:

#include <iostream>
#include <map>
#include <cmath>

using namespace std;

int main()
{
	int n, exp;
	float coe;
	map<int, float> numa, numb;

	cin >> n;
	for (int i = 0; i < n; ++i)
	{
		cin >> exp >> coe;
		numa[exp] += coe;
	}
	cin >> n;
	for (int i = 0; i < n; ++i)
	{
		cin >> exp >> coe;
		numb[exp] += coe;
	}

	for (int i = 0; i <= 1000; ++i)
	{
		numa[i] += numb[i];
		if (fabs(numa[i] - 0.0) < 0.1)numa.erase(i);
	}
	n = numa.size();
	cout << n;
	for (auto ite = numa.rbegin(); ite != numa.rend(); ++ite)
	{
		printf(" %d %.1f", ite->first, ite->second);
	}
	cout << endl;
}

本文遵从CC3.0协议转载请注明:转自凌风技术站

本文标题:[pat题解]1002.A+B for Polynomials

本文链接地址:http://www.iaccepted.net/algorithm/pat/63.html

相关文章



发表评论

电子邮件地址不会被公开。 必填项已用*标注