一.题目描述
给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求第 20190324 项的最后 4 位数字。
二.思路分析
此题类似于斐波那契数列,但是所求20190324项的最后四位数字,要是单纯按照斐波那契数列的思想求下去,BigInteger类型都存不了这么大的数。
然后我们发现,所求20190324项的最后四位数字(也就是变相的告诉我们运算过程只和每个数的后四位有关系),那么我们只需要保留每次运算结果的后四位就OK了,这样绝对不会溢出。
三.代码
public class test1 {
public static void main(String[] args){
int []arr = new int[20190325];
arr[1]=1;
arr[2]=1;
arr[3]=1;
for(int i =4;i<=20190324;i++){
arr[i]=arr[i-1]+arr[i-2]+arr[i-3];
arr[i]=arr[i]%10000;//数太大了,由题目可知,只求最后四位数就好
}
System.out.println(arr[20190324]);
}
}