题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
黄金分割数 0.6180.618 与美学有重要的关系。舞台上报幕员所站的位置大约就是舞台宽度的 0.6180.618 处,墙上的画像一般也挂在房间高度的 0.6180.618 处,甚至股票的波动据说也能找到 0.6180.618 的影子....
黄金分割数是个无理数,也就是无法表示为两个整数的比值。0.6180.618 只是它的近似值,其真值可以通过对 55 开方减去 11 再除以 22 来获得,我们取它的一个较精确的近似值:0.6180340.618034。
有趣的是,一些简单的数列中也会包含这个无理数,这很令数学家震惊!
1\ 3\ 4\ 7\ 11\ 18\ 29\ 47 ....1 3 4 7 11 18 29 47.... 称为“鲁卡斯队列”。它后面的每一个项都是前边两项的和。
如果观察前后两项的比值,即:1/3,3/4,4/7,7/11,11/18 ...1/3,3/4,4/7,7/11,11/18...会发现它越来越接近于黄金分割数!
你的任务就是计算出从哪一项开始,这个比值四舍五入后已经达到了与0.618034 一致的精度。
请写出该比值。格式是:分子/分母。比如:29/4729/47。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
思路
题目的数组条件是,每一项为前两项之和。题目要求是在数组里找到a[i]/a[i+1]与0.618034 一致的精度
初始化
int a[51]={1,3};
void ini(){
for(int i=2;i<=50;i++)
a[i]=a[i-1]+a[i-2];
}
跑答案,注意要用double类型;取一致精度的方法:abs(b - 0.618034) <= 0.000001
(计算值-目标值)的绝对值<=目标值的精度 (0.0...01)
string comp()
{
for (int i = 0; i < 50; i++)
{
double b = a[i] / a[i + 1];//用双精度浮点
if (abs(b - 0.618034) <= 0.000001)
{
stringstream s1;
s1 << a[i] << "/" << a[i + 1];
string s;
s1>>s;
return s;
}
}
}