问题描述
小蓝定义了一个 Fibonacci 集合 F, 集合的元素如下定义:
-
最小的 5 个 Fibonacci 数 1,2,3,5,8 属于集合 F 。
-
如果一个元素 x 属于 F, 则 3x+2、5x+3 和 8 x+5 都属于集合 F。
-
其他元素都不属于 F 。
请问,这个集合中的第 2020 小元素的值是多少?
答案提交
这是一道结果填空题, 你只需要算出结果后提交即可。本题的结果为一个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。
运行限制
最大运行时间:1s
最大运行内存: 256M
方法1
#include <iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
vector<int>a = { 1,2,3,5,8 };
int i = 2;
int j = 1;
int k = 0;
int res = 0;
for (int m = 5; m < 2020; m++)
{
int r = 3 * a[i] + 2;
int s = 5 * a[j] + 3;
int t = 8 * a[k] + 5;
res = min({ r,s,t });
a.push_back(res);
if (r == res)
{
i++;
}
if (s == res) {
j++;
}
if (t == res) {
k++;
}
}
cout << res << endl;
// 请在此输入您的代码
return 0;
}
方法2
#include <bits/stdc++.h>
using namespace std;
set<int> a;
int main()
{
a.insert(1),a.insert(2),a.insert(3),a.insert(5),a.insert(8);
auto iter = a.begin();
int k = 1;
while(iter != a.end())
{
int x = *iter;
if(k == 2020)
{
cout<<*iter<<endl;
return 0;
}
k++;
iter++;
a.insert(3*x+2);
a.insert(5*x+3);
a.insert(8*x+5);
}
return 0;
}