思路是数组一存放第一行,数组二存放相乘系数。几个犯过错的点:for循环结束条件,输出格式。
#include<bits/stdc++.h>
using namespace std;
int main(){
int line=2,K,a,flag=0;
double aN[2010],aNN[2010],b;//数组稍开大一点,最高项可能到2000
for(int i=0;i<=2010;i++){
aNN[i]=0.0;
aN[i]=0.0;
}//初始化为0
while(line--){
scanf("%d",&K);
while(K--){
scanf("%d%lf",&a,&b);
if(flag==0){//flag=0用来表示第一行
aN[a]=b;//存F1系数
}else{
for(int i=0;i<=2010;i++){
if(aN[i]!=0.0)aNN[i+a]+=aN[i]*b;//存F1*F2系数
}
}
}
flag=1;//flag=1用来表示第二行
}
int cnt=0;
for(int i=0;i<=2000;i++){//这里注意结束条件是i<=2000,不然会报错
if(aNN[i]!=0.0)cnt++;
}//有几项非零项
printf("%d",cnt);
for(int i=2000;i>=0;i--){
if(aNN[i]!=0.0){
printf(" %d %.1lf",i,aNN[i]);//注意输出格式
}
}
return 0;
}