题目大意
输入两行,每行格式如上,K为多项式中非零项的个数,N为指数,aN为该项的系数。
最后输出两个多项式的和
思路:
用一个结构体数组 ploy,数组中的每个元素存储该项的指数和系数。将两个多项式的所有项都加入到数组中,按指数从大到小的顺序排列数组中的每个元素,排列完成后,遍历数组,下标为0~K1+K2-1,看第i项与i+1项是否指数相同,若相同,在基础上加上i+1项的系数,若不相同,存储到备用数组,准备输出
注意:
1.输出格式:每一行末尾没有多余的空格,多项式的系数保留一位小数;只输出0时,注意不要有空格,最后一个测试样例就是只输出0的情况
2、
3、注意下边这几种情况,算是自己找出来的特殊样例
input
0
0
output
0
input
1 1000 1.5
0
output
1 1000 1.5
input
1 1000 1.5
1 1000 -1.5
output
0
input
2 1000 1.5 500 1.5
1 1000 -1.5
output
1 500 1.5
最后倒数第2个测试样例没通过,23分
#include<iostream>
#include<algorithm>
using namespace std;
struct ploy{
int exponents;
double coefficients;
}p[22],q[22];
bool cmp(ploy a,ploy b){
return a.exponents>b.exponents;
}
int main(){
int k1,k2,i=0;
//输入
cin>>k1;
for(i=0;i<k1;i++){
cin>>p[i].exponents>>p[i].coefficients;
}
cin>>k2;
for(;i<k1+k2;i++){
cin>>p[i].exponents>>p[i].coefficients;
}
if(k1==0 && k2==0){
cout<<"0"<<endl;
}
else{
sort(p,p+k1+k2,cmp);
int temp_e=p[0].exponents;
double temp_co=p[0].coefficients;
int k=0,count=0;
for(int i=0;i<k1+k2-1;i++){
if(p[i].exponents==p[i+1].exponents){
temp_co+=p[i+1].coefficients;
}
else{ //和下一项不同
count++;
q[k].exponents=temp_e; //把该项加到结果结构体里边
q[k++].coefficients=temp_co;
temp_e=p[i+1].exponents; //更新为下一个
temp_co=p[i+1].coefficients;
}
}
count++;
q[k].exponents=temp_e;
q[k++].coefficients=temp_co;
int j=0;
while(q[j].coefficients==0.0 && j<k){
count--;
j++;
}
if(count==0){ //count=0的时候,直接输出count,注意不能有空格
cout<<count;
}
else if(count!=0){
cout<<count<<" ";
for(;j<k;j++){
printf("%d %.1f",q[j].exponents,q[j].coefficients); //输出格式
if(j!=k-1){
cout<<" ";
}
}
}
cout<<endl;
}
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)