PAT甲级刷题 -- 1002 A+B Polynomials

1002

问题:A+B Polynomials

在这里插入图片描述

分析考虑!

可以很容易想到用数组,数组下标i代表第 xi 项,然后将系数存放在对应下标位置。用两次循环读入,读入到到数组对应位置。考虑到可能包含重复的项,在写入数组时要注意,重复项需要累加,于是写入到数组时我们采用累加的方式。同时还需要注意边界,范围是0-1000,意味着数组下标可以从0-1000,也就是数组的大小为1001。然后考虑输出部分我们输出项数,所以我们需要先遍历计数系数不为0的项,即当某个下标对应值不为0时,我们让count++。开始输出,先输出项,count,然后从高到低遍历数组,当系数不为0时,我们才将下标以及对应值输出。

开始动手!

#include <stdio.h>
#define MAXSIZE 1001

double arr[MAXSIZE];

int main(void)
{
	int num;
	int i;
	double value;

	//处理第一行输入
	scanf("%d",&num);
	while(num--)
	{
		scanf("%d %lf",&i,&value);
		arr[i] += value;
		
	}

	//处理第二行输入
	scanf("%d",&num);
	while(num--)
	{
		scanf("%d %lf",&i,&value);
		arr[i] += value;
	}

	//找出多少项
	int count = 0;
	for(i = 0;i < MAXSIZE;i++)
		if(arr[i] != 0)
			count++;

	//开始输出
	printf("%d",count);
	for(i = MAXSIZE - 1;i >= 0;i--)
		if(arr[i] != 0)
			printf(" %d %.1f",i,arr[i]);

	return 0;
}

回顾反思!

  • 刚开始我用了三个数组,分别存放第一次输入第二次输入以及汇总处理后的数据,但是后来发现没必要。其实用一个数组就完全可以了。
  • 第一次提交的时候,只部分正确,由于没考虑到输入的项可能是相同项的问题,具体操作时用的赋值,即arr[i] = value; 这样一来的,当某一行含有重复项时,系数会被擦写。所以我更新了代码,采用累加的方式,这样即使包含重复项,我们也可以将系数累加起来。
  • 边界问题,0-1000项这一题目要求开始没仔细看,数组我设定成了大小为1000的,最后导致一个编译点始终过不去,然后我再回头看题目要求,发现我的数组大小没给够!

what‘s more

数据结构和算法还没学,甲级第三题真的刷不动了。似乎是需要一个求最短路径的算法(我也不知道是不是叫这个名字。。。),以我现在的能力自己实现起来有点困难。

so

从2019.12.19日起开始学习数据结构和算法,明年二月份再开始刷PAT甲级。

发布了18 篇原创文章 · 获赞 4 · 访问量 845

猜你喜欢

转载自blog.csdn.net/GuoningningPro/article/details/103588405