可以定义为一个数组,大小没审好题。
#include<cstdio>
using namespace std;
int main(){
int k1,k2;
int n,count=0;
float an;
float a[11]={0},b[11]={0},c[11]={0};
scanf("%d",&k1);
while(k1--){
scanf("%d %f",&n,&an);
a[n]=an;
}
scanf("%d",&k2);
while(k1--){
scanf("%d %f",&n,&an);
b[n]=an;
}
for(int i=0;i<11;i++){
if(a[i]!=0||b[i]!=0){
c[i]=a[i]+b[i];
count++;
}
}
printf("%d ",count);
for(int i=11;i>0;i--){
if(c[i]!=0){
printf("%d %f",i,c[i]);
count--;
if(count!=0)printf(" ");
}
}
}
修改后:
#include <stdio.h>
#include<string.h>
int main()
{
float a[1001];
int i,k;
float temp;
// 初始化数组
for(i = 0; i <= 1000; i++){
a[i] = 0.0f;
}
// 分别输入两个多项式
scanf("%d", &k);
while(k--){
scanf("%d%f", &i, &temp);
a[i] += temp;
}
scanf("%d", &k);
while(k--){
scanf("%d%f", &i, &temp);
a[i] += temp;
}
// 判断当前多项式的项数
k = 0;
for(i = 0; i <= 1000; i++){
if(a[i]!=0.0){
k++;
}
}
printf("%d", k);
// 项数为0则只输出k,且不带空格
if(k != 0)
printf(" ");
for(i=1000; i >= 0; i--){
if(a[i]!=0.0){
printf("%d ", i);
printf("%0.1f", a[i]);
k--;
// 输出最后一项后不带空格
if(k != 0)
printf(" ");
}
}
return 0;
}