题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
黄金分割数 0.618 与美学有重要的关系。舞台上报幕员所站的位置大约就是舞台宽度的 0.618处,墙上的画像一般也挂在房间高度的 0.618处,甚至股票的波动据说也能找到 0.618 的影子....
黄金分割数是个无理数,也就是无法表示为两个整数的比值。0.618只是它的近似值,其真值可以通过对 5开方减去 1再除以 2来获得,我们取它的一个较精确的近似值:0.618034
有趣的是,一些简单的数列中也会包含这个无理数,这很令数学家震惊!
1 3 4 7 11 18 29 47.... 称为“鲁卡斯队列”。它后面的每一个项都是前边两项的和。
如果观察前后两项的比值,即:1/3,3/4,4/7,7/11,11/18...会发现它越来越接近于黄金分割数!
你的任务就是计算出从哪一项开始,这个比值四舍五入后已经达到了与 0.618034 一致的精度。
请写出该比值。格式是:分子/分母。比如:29/47
之前还真的没有做过浮点数比较的题,查漏补缺了hh。浮点数不能直接用“==”“>""<"来比较,需要定义一个极小值,通常1e-6就够了,然后我们用cmath中的fabs去判断两数的差是不是小于那个极小值,小于的
#include <iostream>
#include<vector>
#include<cmath>
using namespace std;
const double mod=0.618034;
const double Eps=1e-6;
int main()
{
// 请在此输入您的代码
vector<long long> v;
v.push_back(1);
v.push_back(3);
for(int i=2;;i++)
{
int n=v[i-1]+v[i-2];
v.push_back(n);
double ans=v[i-1]*1.00/n*1.00;
if(fabs(ans-mod)<Eps)
{
cout<<v[i-1]<<"/"<<n;
break;
}
}
return 0;
}