PAT 甲级 1002题

题目:1002 A+B for Polynomials

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 N1​ aN1​​ N2​ aN2​​ ... NK​ aNK​​

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

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

解题思路:

可以设置一个数组,下标为指数,存储的数据是系数,然后通过输入依次将值按照指数(下标)存入数组中,再遍历数组,输出值不为0的项。

注意:

①测试点1:当输出的时候需要将系数保留1位小数;

②测试点3/4/5/6:当A、B对应指数的系数相加正好为0的时候,其输出项数需要仔细的计算(即为当系数为0的时候,需要将该项去掉);

代码:

cpp 复制代码
#include<iostream>
using namespace std;
#define MAX 1002
int main()
{
	float arr[MAX] = {0.0f};    //对应指数作为数组下标,其存储的内容为该指数对应的系数
	int zhishu = 0;   //指数
	float xishu = 0;    //系数
	int K = 0;   //表示未知数的个数
	int K_Sum = 0;   //表示最终表达式的未知数个数

	//输入
	int j = 2;
	while(j--)   //输入两轮:A和B
	{
		cin>>K;
		K_Sum += K;
		while(K--)
		{
			cin>>zhishu>>xishu;
			for(int i=0;;i++)
			{
				if(i == zhishu)
				{
					if(arr[i] != 0.0f)   //如果A和B有相同的指数
					{
						K_Sum--;
						arr[i] += xishu;
						if(arr[i] == 0.0f)    //系数相加结果为0
						{
							K_Sum--;
						}
						break;
					}
					arr[i] += xishu;
					break;
				}
			}
		}
	}

	//输出
	cout<<K_Sum;
	for(int i=1001;i>=0;i--)
	{
		if(arr[i] != 0.0f)
		{
			cout<<" "<<i<<" ";
			printf("%.1f",arr[i]);
		}
	}
	cout<<endl;
	system("pause");
	return 0;
}
相关推荐
__BMGT()39 分钟前
C++ QT 打开图片
前端·c++·qt
顾子茵1 小时前
c++从入门到精通(五)--异常处理,命名空间,多继承与虚继承
开发语言·c++
冲帕Chompa1 小时前
图论part10 bellman_ford算法
数据结构·算法·图论
緈福的街口2 小时前
【leetcode】144. 二叉树的前序遍历
算法·leetcode
GG不是gg2 小时前
排序算法之基础排序:冒泡,选择,插入排序详解
数据结构·算法·青少年编程·排序算法
随意起个昵称2 小时前
【双指针】供暖器
算法
倒霉蛋小马2 小时前
最小二乘法拟合直线,用线性回归法、梯度下降法实现
算法·最小二乘法·直线
YueiL2 小时前
基于RK3588的智慧农场系统开发|RS485总线|华为云IOT|node-red|MQTT
c++·物联网·华为云·rk3588·rs485
二进制人工智能2 小时前
【OpenGL学习】(二)OpenGL渲染简单图形
c++·opengl
codists2 小时前
《算法导论(第4版)》阅读笔记:p82-p82
算法