原题:
代码:
#include <cstdio>
const int max_n = 1111;
double p[max_n]={};
int main(){
int k,n,count = 0;
double a;
scanf("%d",&k);
for(int i=0;i<k;i++)
{
scanf("%d %lf",&n,&a);
p[n]+=a;
}
scanf("%d",&k);
for(int i=0;i<k;i++)
{
scanf("%d %lf",&n,&a);
p[n]+=a;
}
for(int i=0;i<max_n;i++)
{
if(p[i]!=0){
count++;
}
}
printf("%d",count);
for(int i=max_n-1;i>=0;i--)
{
if(p[i]!=0)
printf(" %d %.1f",i,p[i]);
}
return 0;
}
tips:
1.题意是给出两行,每行表示一个多项式:第一个数指该多项式中系数非零项的项数,后面每两个数表示一项,这两个数分别表示该项的幂次和系数。求两个多项式的和,并以与前面相同的格式输出结果。
2.要注意正负抵消的问题,当系数相加不等于零的时候,项数才加1。
3.输出每一个非零系数项时,幂次为1000是可以取到的,所以循环的最大值至少要取1000而不是999,并且p数组的大小至少是1001,循环中不能出现i<1000这种。