【PAT】1002. A+B for Polynomials (25)

时间:2023-03-10 08:13:07
【PAT】1002. A+B for Polynomials (25)

1002. A+B for Polynomials (25)

This time, you are supposed to find A+B where A and B are two polynomials.

Input

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

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

方法一:

程序设计:

  构造一个包含1001个元素的数组,把输入的多项式的指数项当做数组的下标,系数项当做该下标对应元素的值

  **注意:系数项求和之后为0的项不显示

C++ 代码如下:

 #include <bits/stdc++.h>
using namespace std; int main(){
float num[];
for(int i=;i<;i++){
num[i]=0.0;
}
int m,n,temp1,count=;
float temp2;
cin>>m;
for(int i=;i<m;i++){
cin>>temp1>>temp2;
num[temp1]+=temp2;
}
cin>>n;
for(int i=;i<n;i++){
cin>>temp1>>temp2;
num[temp1]+=temp2;
}
for(int i=;i<;i++){
if(num[i]!=)
count++;
}
cout<<count;
for(int i=;i>=;i--){
if(num[i]!=)
cout<<' '<<i<<' '<<setiosflags(ios::fixed)<<setprecision()<<num[i];
}
system("pause");
}

C++ Code 1

方法二:

程序设计:

  使用标准模板库(STL)中的 map 容器

  关于 map :map 是用来存放 <key,value>  键值对的数据结构,key 和 value 一一对应,并且在map 中,key是唯一的

            1.在map中存入数据时,默认安装key的升序来存放

map<int,float> num; //默认按照key的升序排列存储数据,int,float分别为key和value的数据类型

        此题中将多项式的指数项作为key,系数项作为value进行存储,若最后按照key的降序进行打印输出时,可使用逆向迭代器来遍历map中的元素:

map<int,float>::reverse_iterator it;  //定义map的逆向迭代器
for(it=num.rbegin();it!=num.rend();it++){
if(it->second!=0)
cout<<' '<<it->first<<' '<<setiosflags(ios::fixed)<<setprecision(1)<<it->second;
}        

        其中:num.rbegin() :返回指向第一个元素的逆向迭代器

           num.rend() :返回指向最后一个元素的逆向迭代器

              it->first :表示map中 it 迭代器指向的元素的key值,等同于 (*it).first

              it->second:表示map中 it 迭代器指向的元素的value值,等同于 (*it).second

        2.将map存入数据时按照key的降序排列

map<int,float,greater<int> > num;  //按照key的降序来存储数据
// ^ 注意此处有空格

        这时,再打印多项式的指数项和系数项时可使用map的普通的迭代器:

map<int,float>::iterator it;  //普通的迭代器
for(it=num.begin();it!=num.end();it++){
if(it->second!=0)
cout<<' '<<it->first<<' '<<setiosflags(ios::fixed)<<setprecision(1)<<it->second;
}

      

C++ 代码如下:

 #include <bits/stdc++.h>
using namespace std; int main(){
map<int,float,greater<int> > num;
int m,exp;
float coef;
for(int i=;i<;i++){
cin>>m;
for(int j=;j<m;j++){
cin>>exp>>coef;
num[exp]+=coef;
}
}
m=;
map<int,float>::iterator it;
for(it=num.begin();it!=num.end();it++){
if(it->second!=)
m++;
}
cout<<m;
for(it=num.begin();it!=num.end();it++){
if(it->second!=)
cout<<' '<<it->first<<' '<<setiosflags(ios::fixed)<<setprecision()<<it->second;
}
system("pause");
}

C++ Code 2