//我的版本的改进
//哈哈成功ac了
//思想就是存储第一组输入的,用结构体数组,然后第二组输入的边输入边求出结果,用+=,要注意的是结果数组不需要用结构体了。一是不需要,二是再倒次数输入时只要判断存不存在就行,不需要排序啊之类的
#include<stdio.h>
struct Poly{
int ex;
float coe;
};
float C[2001]; //0-2000因为输入的两组数最高次是1000,两个多项式相乘是次数相加系数相乘
int main(){
int m,n,max,count=0;
C[2000]={0.0};
int tempex,tempn;
float tempcoe,tempc;
struct Poly A[10];//反正最大也就10项而已
// struct Poly C[100];//目测一下,结果C不会超过100项吧,是的,不对,事实上不会超过m*n项
scanf("%d",&m);
for(int i=0;i<m;i++){
//先把A输入到数组中,然后用B挨个相乘相加好了,新的结果可能得放到另外一个数组中,否则影响相加的
//可以不可以用结构体呢
scanf("%d%f",&A[i].ex,&A[i].coe);
}
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d%f",&tempex,&tempcoe);
for(int i=0;i<m;i++){
//把结果求出来并放置到结果C中
tempn=A[i].ex+tempex;//注意这里一开始写成了*,其实应该是加
tempc=A[i].coe*tempcoe;//系数相乘
C[tempn]+=tempc;
}
}
for(int i=0;i<=2000;i++){
if(C[i]!=0){
count++;
max=i;//这样下次就从0-max遍历即可
}
}
printf("%d",count);
for(int i=max;i>=0;i--){
if(C[i]!=0)
printf(" %d %.1f",i,C[i]);
}
return 0;
}
//哈哈成功ac了
//思想就是存储第一组输入的,用结构体数组,然后第二组输入的边输入边求出结果,用+=,要注意的是结果数组不需要用结构体了。一是不需要,二是再倒次数输入时只要判断存不存在就行,不需要排序啊之类的
#include<stdio.h>
struct Poly{
int ex;
float coe;
};
float C[2001]; //0-2000因为输入的两组数最高次是1000,两个多项式相乘是次数相加系数相乘
int main(){
int m,n,max,count=0;
C[2000]={0.0};
int tempex,tempn;
float tempcoe,tempc;
struct Poly A[10];//反正最大也就10项而已
// struct Poly C[100];//目测一下,结果C不会超过100项吧,是的,不对,事实上不会超过m*n项
scanf("%d",&m);
for(int i=0;i<m;i++){
//先把A输入到数组中,然后用B挨个相乘相加好了,新的结果可能得放到另外一个数组中,否则影响相加的
//可以不可以用结构体呢
scanf("%d%f",&A[i].ex,&A[i].coe);
}
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d%f",&tempex,&tempcoe);
for(int i=0;i<m;i++){
//把结果求出来并放置到结果C中
tempn=A[i].ex+tempex;//注意这里一开始写成了*,其实应该是加
tempc=A[i].coe*tempcoe;//系数相乘
C[tempn]+=tempc;
}
}
for(int i=0;i<=2000;i++){
if(C[i]!=0){
count++;
max=i;//这样下次就从0-max遍历即可
}
}
printf("%d",count);
for(int i=max;i>=0;i--){
if(C[i]!=0)
printf(" %d %.1f",i,C[i]);
}
return 0;
}