1002. A+B for Polynomials 解析

这个题坑点在于

一、第一个是在于输出

题目要求的输出是精确到一位小数。所以在输出的时候要控制输出的格式。

而且最后一个结果的输出后面是不能带有空格的。最后一个输出需要单独判定。

二、在于两个多项式

两个多项式系数相加是会有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 << " ";
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值