PAT乙级_1106 2019数列_Python_AC解法_含疑难点
注意事项:
因为笔者的编程水平以自学为主,代码结构可能比较混乱、变量命名可能不够规范。
文章中的AC解法不一定最优,并且包含笔者强烈的个人风格,不喜勿喷,但欢迎在评论中理性讨论或者给出提升建议。
文章中提到的疑难点仅为个人在刷题过程中所遇到的情况,如有读者存在其他疑难点,欢迎在评论中加以补充,笔者会尽量将其加入到文章内容中。
合集:
PAT乙级_合集_Python_AC解法
题目:
1106 2019数列
题目描述:
把 2019 各个数位上的数字 2、0、1、9 作为一个数列的前 4 项,用它们去构造一个无穷数列,其中第 n(>4)项是它前 4 项之和的个位数字。例如第 5 项为 2, 因为 2+0+1+9=12,个位数是 2。
本题就请你编写程序,列出这个序列的前 n 项。
输入格式:
输入给出正整数 n(≤1000)。
输出格式:
在一行中输出数列的前 n 项,数字间不要有空格。
输入样例:
10
输出样例:
2019224758
代码限制:
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
AC解法:
# 获取输入的数据
n = int(input()) # 获取输入的项数# 处理数据并输出结果
arr = [2, 0, 1, 9] + ([0] * (n - 4) if n > 4 else []) # 预生成首四项为 2、0、1、9 ,其他项为 0 的数字列表
if n < 4: # 若要求的项数小于 4print(''.join(map(str, arr[:n]))) # 直接输出前几项组成的数字
else: # 项数大于 4for i in range(4, n): # 遍历第五项开始的数字arr[i] = sum(arr[i-4:i]) % 10 # 将该项的值更新为前四项和的个位数print(''.join(map(str, arr))) # 按格式要求拼接输出结果
题目解读:
本题描述比较易懂。
先获取输入的项数,再从第五项开始将项数的值更新为前四项的和,最后拼接结果进行输出。
疑难点:
测试点1答案错误
经验证,该测试点输入的 n 的值是 1 ,实际需要输出 2 ,即 2019 的第一位数字,但题干中没对小于 4 的项数进行输出格式的描述,因此只能推测是要直接输出前几项组成的数字。