PAT 甲级测试题目 -- 1002 A+B for Polynomials

题目地址
题目大意:输入两个多项式,每个多项式输入包含该多项式的项数,以及每项的指数和系数,将两个多项式中指数相同的系数相加。输出结果多项式的项数,按指数从大到小输出多项式中每项的指数和系数,并保留一位小数,输出格式和输入格式保持一致。
思路:
思路:用两个大小为1001的数组分别记录被用到的指数以及指数对应的系数之和,遍历输出。时间上要遍历三个1001次for循环分别用于两个数组的初始化以及哪些指数被用到了,属于较为时空复杂度较高且麻烦但是容易理解的思路。

代码

#include<iostream>
#include<iomanip>
using namespace std;

void EnterCal(double * coefficients, int * Ks, int & index, int & number) {
	double temp;
	int terms;
	cin >> terms;
	for (int i = 0; i < terms; i++) {
		double temp;
		cin >> index;
		if (Ks[index] != 1) {
			number++;
			Ks[index] = 1;
		}
		cin >> temp;
		coefficients[index] += temp;
		if (coefficients[index] == 0)
			number--;
	}
}

int main() {
	int index;
	double coefficients[1001];
	int Ks[1001], terms;
	int number = 0;
	
	for (int i = 0; i < 1001; i++) {
		Ks[i] = 0;
		coefficients[i] = 0;
	}

	EnterCal(coefficients, Ks, index, number);
	EnterCal(coefficients, Ks, index, number);

	cout << number;
	if (number != 0)
		cout << " ";

	for (int i = 1000; i >= 0; i--)
	{
		if (Ks[i] != 0 && coefficients[i]!= 0 ) {			
			cout << i << " " << fixed << setprecision(1) << coefficients[i] + pow(10, -14);
			number--;
			if (number > 0)
				cout << " ";
		}
		
	}
	return  0;
}

坑点:
题目中没有明确说明但要求:在多项式计算过后没有项数的时候,应输出0,也就是只输出项数,并不输出指数以及系数,依据估计是藏在要求输出格式和输入格式一致这里。。。

有时间的话我试着用 C++ 中类似键值对的数据记录方式,应该会很大程度上减少时空复杂度,有时间更

原文地址:https://www.cnblogs.com/Breathmint/p/10262538.html