思路是数组一存放第一行,数组二存放相乘系数。几个犯过错的点:for循环结束条件,输出格式。
#includeusing 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; }



