问题:
这一次,你要找到A+B,其中A和B是两个多项式(Polynomials)。
输入规范:每个输入文件包含一个测试案例。每个案例占2行,每行包含一个多项式的信息。
其中K是多项式中非零项的数量, 和 分别是指数和系数。给定
输出规范:对于每个测试案例,你应该在一行中输出A和B的总和,其格式与输入相同。注意,每行的末尾不能有多余的空格。请精确到小数点后1位。
Sample Input:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output:
3 2 1.5 1 2.9 0 3.2
思路:
一开始没看懂,题目意思应该是将指数相同的系数相加,每一项是乘10的次方。因此可以开一个1000大小的数组a,i表示指数,a[i]=j表示该指数下的系数。首先想到的方法是:第一组数遍历数组按该格式存储,第二组数按同样方式存储,同一个指数下系数相加。最后倒叙输出系数不为0的项。
#include<stdio.h>
int main(){
//k是输入项数,index是指数,coef是系数
int k1,k2,index;
float coef;
float group[1001]={0};//创建数组a[i]=j,i是指数,j是系数
scanf("%d", &k1);//输入第一组数
for(int i=0;i<k1;i++){
scanf("%d%f",&index,&coef);
group[index]+=coef;
}
scanf("%d",&k2);//输入第二组数
for(int i=0;i<k2;i++){
scanf("%d%f",&index,&coef);
group[index]+=coef;
}
int count=0;//结果个数
for(int i=0;i<1001;i++){
if(group[i]!=0)
count++;
}
printf("%d",count);
for(int i=1000;i>=0;i--){
if(group[i]!=0.0)
printf(" %d %.1f",i,group[i]);//注意输出间的空格...
}
return 0;
}