问题描述
小蓝定义了一个 Fibonacci 集合 F, 集合的元素如下定义:
-
最小的 5 个 Fibonacci 数 1,2,3,5,81,2,3,5,8 属于集合 F 。
-
如果一个元素 x 属于 F, 则 3+2、5+33x+2、5x+3 和 8+58x+5 都属于集合 F 。
-
其他元素都不而于 F 。
请问,这个集合中的第 2020 小元素的值是多少?
答案提交
这是一道结果填空题, 你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
//双指针,一个指向(i)最小的可以用的值,当8x+5比当前求到的数小时,小指针(i)+1; 大指针(j)指向当前求到的元素
import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
int[] a=new int[2021];
a[1]=1;
a[2]=2;
a[3]=3;
a[4]=5;
a[5]=8;
int i=1;
int j=5;
while(j<2020){
if(8*a[i]+5<a[j]){
i++;
}
int min=Integer.MAX_VALUE;
for(int k=i;k<j;k++){
if(3*a[k]+2>a[j] && 3*a[k]+2<min){
min=3*a[k]+2;
}
if(5*a[k]+3>a[j] && 5*a[k]+3<min){
min=5*a[k]+3;
}
if(8*a[k]+5>a[j] && 8*a[k]+5<min){
min=8*a[k]+5;
}
}
j++;
a[j]=min;
}
System.out.println(a[2020]);
}
}