1002 A+B for Polynomials (25分)
题目自行查看浙大PTA 甲级(English)1002
题目为简单模拟,难度不大,此处提供两种思路,编译器是g++ 6.5.0,C++编译器,头文件包含cstdio(不推荐写stdio.h)
个人擅长用C解题,过程中习惯用scanf和printf而不是cin 和 cout(速度上前两者快得多)
题解1
#include <cstdio>
double a1[1001],a2[1001],a3[1001]; // 三个double类型数组(静态存储区自动初始化为0)
int main()
{
int k,count = 0,ex; // count用于计项数
double co;
scanf("%d", &k);
while(k--){
scanf("%d%lf", &ex,&co);
a1[ex] = co;
}
scanf("%d", &k);
while(k--){
scanf("%d%lf", &ex,&co);
a2[ex] = co;
}
for(int i = 0;i < 1001;i++){
if(a1[i]+a2[i] != 0)
++count;
a3[i] = a1[i]+a2[i];
}
printf("%d",count);
for(int i = 1000;i >= 0 && count;i--){
if(a3[i] != 0){
printf(" %d %.1f", i,a3[i]);
}
}
return 0;
}
该程序的缺点在于占用内存会更大,速度相对也慢一些,但三个数组使得我们对逻辑判断更明确
题解2
#include <cstdio>
const int max = 1001;
double sum[max];
int main()
{
int k,n,count = 0;
double a;
scanf("%d", &k);
for(int i = 0;i < k;i++)
{
scanf("%d%lf", &n, &a);
sum[n] += a;
}
scanf("%d", &k);
for(int i = 0;i < k;i++)
{
scanf("%d%lf", &n, &a);
sum[n] += a;
}
for(int i = 0;i < max;i++)
if(sum[i])
++count;
printf("%d", count);
for(int i = max-1;i >= 0 && count;i--) // 判断条件加上count的目的是当count = 0时直接跳过循环节省时间
if(sum[i])
printf(" %d %.1f", i, sum[i]);
return 0;
}