每日一题:由卢卡斯队列引出java四舍五入

导读:本篇文章讲解 每日一题:由卢卡斯队列引出java四舍五入,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一.题目引出

黄金分割数 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(),方法

每日一题:由卢卡斯队列引出java四舍五入

 其语法和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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!