一.题目引出
黄金分割数 0.6180.6180.618 与美学有重要的关系。舞台上报幕员所站的位置大约就是舞台宽度的 0.6180.6180.618 处,墙上的画像一般也挂在房间高度的 0.6180.6180.618 处,甚至股票的波动据说也能找到 0.6180.6180.618 的影子….
黄金分割数是个无理数,也就是无法表示为两个整数的比值。0.6180.6180.618 只是它的近似值,其真值可以通过对 555 开方减去 111 再除以 222 来获得,我们取它的一个较精确的近似值:0.6180340.6180340.618034。
有趣的是,一些简单的数列中也会包含这个无理数,这很令数学家震惊!
1 3 4 7 11 18 29 47….称为“鲁卡斯队列”。它后面的每一个项都是前边两项的和。
如果观察前后两项的比值,即:1/3,3/4,4/7,7/11,11/18…会发现它越来越接近于黄金分割数!
你的任务就是计算出从哪一项开始,这个比值四舍五入后已经达到了0.618034一致的精度。
请写出该比值。格式是:分子/分母。比如:29/4729/4729/47。
二.问题分析
由问题可知,最后的结果需要四舍五入与0.618034数值一样
我们都知道JAVA里面Math,round()方法可以进行四舍五入,但是这个只能四舍五入到整数位
System.out.println(Math.round(12.333));//12 System.out.println(Math.round(12.633));//13
这样的话显然不符合我们本题所能达到的要求 ,因此我们应该像其他的方法,其实String中有一个方法为String.format(),方法
其语法和C语言差不多,例如
System.out.println(String.format("%.2f", 12.333)); //12.33 System.out.println(String.format("%.2f", 12.635)); //12.64
其自动进行四舍五入操作,如下打印其实也可以进行四舍五入到指定位的操作
System.out.printf("%.2f\n",12.126); //12.13 System.out.format("%.2f",12.126); //12.13
因此之后的操作就很好做了
三.代码实现
public class Main {
public static void main(String[] args) {
int a = 1;
int b = 3;
int c = 0;
for (int i = 3; i < 99999; i++) {
c = a+b;
if("0.618034".equals(String.format("%.6f",(float)a/b))){
System.out.println(a+"/"+b);
break;
}
a = b;
b = c;
}
}
}
输出结果:
1364/2207
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/101077.html