PAT甲级1002题A+B for Polynomials

 

PAT甲级1002题A+B for Polynomials

原题传送链接

题目描述:

1002 A+B for Polynomials (25 分)

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 N​1​​ a​N​1​​​​ N​2​​ a​N​2​​​​ ... N​K​​ a​N​K​​​​

where K is the number of nonzero terms in the polynomial, N​i​​ and a​N​i​​​​ (i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that 1≤K≤10,0≤N​K​​<⋯

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

题目意思是:

输入两行关于多项式的信息:第一个数是每行的项数K(0<=k<=10),其后有2*k个数字,表示项的次数(整数)N和系数(小数)a

k N1 a1 N2 a2 ... ... Nk ak;

其中Ni和ai都是[0,1000]而Ni取整数,ai取小数。

要求输出这两行多项式的和,输出格式和输入类似,先输出多项式的项数,再按照次数从大到小的顺序输出项的幂和系数,系数取小数点后一位。

我的代码:

#include
#include
#include
using namespace std;
int main(){
//设置三个数组对数据进行存储
	float a[1005], b[1005], c[1005];
	int k, i;
//初始化数组,
	memset(a, 0, sizeof(a));
	memset(b, 0, sizeof(b));
	memset(c, 0, sizeof(c));

	cin >> k;
	
	while(k--){
		int i = 0;
		cin >> i;
		cin >> a[i];
	}
	cin >> k;
	while(k--){
		i = 0;
		cin >> i;
		cin >> b[i];
	}
//将两数组数据整合一起
	for(i = 0; i < 1005; i++){
		c[i] = a[i] + b[i];
	}
//统计一共有多少系数大于零的多项式
	int count = 0;
	for(i = 0; i < 1005; i++){
		if(c[i] != 0){
			count++;
		}
	}
	cout << count;

	for(i = 1005; i >= 0; i--) {
		if(c[i] != 0){
//注意输出的空格格式,不可多也不可少
			cout<<" "<< i << " ";
			printf("%.1f",c[i]);
		}
	}
	return 0;
}

经过几次修改上面的代码总算通过了所有的测试点数据,有以下几点注意的。

1、首先输入输出格式,输出要求每个数字相隔一位空格而最后一位数字后不能有空格,所有我将空格放在数字的前面来隔开输出,还有系数按小数点后一位输出,使用C中的printf来控制即可解决。

2、输入的两行数据中多项式的项不一定全部相同,所以要分别相加,而且项的幂最大可以到1000,这一点很重要,因为在一开始我一位项的次数最多和K值一样导致有一个测试用例一直过不了,后来回看题目才发现问题;于是把数组和循环的数据判断都改成了1005,测试才能全部通过。

3、事实上我的代码还能够继续优化,在空间复杂度上和时间复杂度上;比如可以用一个数组来存储数据,直接将输入的数据加进去就可以了,其他的日后看到再说吧。

 

 

你可能感兴趣的:(PAT,算法)