刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

数列
用以下方式构造数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。
给出一个正整数a,要求数列中第a个数对1000取模的结果是多少。
时间限制:1000
内存限制:65536
输入
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1 <= a <= 1000000)。
输出
n行,每行输出对应一个输入。输出应是一个正整数,为数列中第a个数对1000取模得到的结果。
样例输入

4
5
2
19
1

样例输出

5
1
181
1

使用微信搜索喵呜刷题,轻松应对考试!

答案:

解析:

【喵呜刷题小喵解析】这个问题是一个经典的斐波那契数列问题,要求计算斐波那契数列中第a个数对1000取模的结果。由于斐波那契数列的计算涉及到大量的重复计算,所以直接使用递归方法会导致时间复杂度过高,需要采用动态规划或者记忆化搜索的方法进行优化。在这个问题中,我们可以使用记忆化搜索的方法,将已经计算过的斐波那契数列的值保存起来,避免重复计算。具体实现时,我们可以定义一个函数`get_number(n)`,当`n`为1或2时,直接返回1;否则,返回`get_number(n-1) + get_number(n-2)`对1000取模的结果。为了避免重复计算,我们可以使用一个字典来保存已经计算过的斐波那契数列的值。在程序中,我们首先读入测试数据的组数`n`,然后对于每一组测试数据,读入一个正整数`a`,并调用函数`get_number(a-1)`来计算斐波那契数列中第`a`个数对1000取模的结果,并将结果输出到标准输出中。需要注意的是,由于题目中要求输出的是数列中第`a`个数对1000取模的结果,因此在计算斐波那契数列的值时,我们需要对结果取模,以避免结果过大而溢出。同时,由于题目中给定的`a`的取值范围较大,我们需要使用快速读入的方法来读入输入,以提高程序的效率。
创作类型:
原创

本文链接:数列 用以下方式构造数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。 给出一

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share