自学成果
#include <cstdio>
const int M = 2010;
double a[M] = {0},b[M] = {0};
int main() {
int k,n,count = 0;
double m;
scanf("%d",&k);
for(int i = 0;i < k;i++) {
scanf("%d %lf",&n,&m);
a[n] = m;
}
scanf("%d",&k);
for(int i = 0;i < k;i++) {
scanf("%d %lf",&n,&m);
for(int j = 1001;j >=0;j--) {
if(a[j] != 0) {
b[n + j] = b[n + j] + a[j] * m;
}
}
}
for(int i = 0;i < M;i++) {
if(b[i] != 0) count++;
}
printf("%d",count);
for(int i = M - 1;i >= 0;i--) {
if(b[i] != 0) printf(" %d %.1f",i,b[i]);
}
return 0;
}
出现的问题
之前没有用两个数组,只用一个数组,在原数组的基础上进行计算,忽略了第二个多项式第一项进去之后会改变原来数组的项和值,没有别的方法于是创建了两个数组
改进结果
学会使用结构体
可以使用结构体储存不变的一组变量
#include <cstdio>
struct Poly {
int exp;
double cof;
} Poly[1001];
double ans[2001];
int main() {
int n,m,number = 0;
scanf("%d",&n);
for(int i= 0;i < n;i++) {
scanf("%d %lf",&Poly[i].exp,&Poly[i].cof);
}
scanf("%d",&m);
for(int i = 0;i < m;i++) {
int exp;
double cof;
scanf("%d %lf",&exp,&cof);
for(int j = 0;j < n;j++) {
ans[exp + Poly[j].exp] += (cof * Poly[j].cof);
}
}
for(int i = 0;i <= 2000;i++) {
if(ans[i] != 0.0) number++;
}
printf("%d",number);
for(int i = 2000;i >= 0;i--) {
if(ans[i] != 0) {
printf(" %d %.1f",i,ans[i]);
}
}
return 0;
}