「PAT乙级真题解析」Basic Level 1106 2019数列 (问题分析+完整步骤+伪代码描述+提交通过代码)

乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。

PAT (Basic Level) Practice 1106 2019数列

问题分析

题设要求很明确, 给定一个递推数列, 并第n项是第n-4到第n-1项的和的个位数字。
要求给定正整数n之后, 输出前n项.
于是我们的重点在于如何实现递推式得到数列的新一项, 然后一直生成到指定项即可。

如何生成新一项

因为我们需要用到前4项, 所以需要记录前4项。
用前4项之和生成新项后, 需要将第1项去掉, 然后将当前新项加到前4项中的末尾, 相当于一个滑动窗口。
如果编程语言自带"队列"这种数据结构, 十分好实现。
但是C语言中没有队列, 如果每次都自行移动记录的前4项, 可能会造成超时。
于是我们重新审视为什么我们要移动记录的4项值, 原因在于我们希望每一次都减去第1项, 把新项加在末尾。
但C语言难以实现我们这个直觉上想到的第一方案, 我们需要换一个方案。
其实我们需要的是知道接下来要减去哪一项(第一方案就是通过队列让我们确定每一次都减去第一项)
所以我们可以记录当前的迭代次数, 然后通过模运算, 在记录的4项值中循环进行数值更新。

样例

当前记录的前4项: 2 0 1 9
当前和: 12

生成第5项(记当前迭代次数为0)

  • 当前和取个位数字, 得到新项"2"
  • 当前和减去"前4项中索引为
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明仔的阳光午后

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值