第四届蓝桥杯JavaB组省赛-黄金连分数

2023-11-15

第四届蓝桥杯JavaB组省赛-黄金连分数

题目描述

题目描述
黄金分割数0.61803… 是个无理数,这个常数十分重要,在许多工程问题中会出现。有时需要把这个数字求得很精确。

对于某些精密工程,常数的精度很重要。也许你听说过哈勃太空望远镜,它首次升空后就发现了一处人工加工错误,对那样一个庞然大物,其实只是镜面加工时有比头发丝还细许多倍的一处错误而已,却使它成了“近视眼”!!

言归正传,我们如何求得黄金分割数的尽可能精确的值呢?有许多方法。

比较简单的一种是用连分数:

                                1
黄金数 = ------------------------------
                                 1
                1 + ---------------------
                                    1
                       1 + -------------
                                      1
                             1 + -------
                                   1 + ...

                       

这个连分数计算的“层数”越多,它的值越接近黄金分割数。

请你利用这一特性,求出黄金分割数的足够精确值,要求四舍五入到小数点后100位。

小数点后3位的值为:0.618
小数点后4位的值为:0.6180
小数点后5位的值为:0.61803
小数点后7位的值为:0.6180340

(注意尾部的0,不能忽略)

你的任务是:写出精确到小数点后100位精度的黄金分割值。

注意:尾数的四舍五入! 尾数是0也要保留!

显然答案是一个小数,其小数点后有100位数字,请通过浏览器直接提交该数字。
注意:不要提交解答过程,或其它辅助说明类的内容。

解题过程

需要使用JAVA中的大数运算的相关知识,这个是关键,如果对这方面知识不明确做的会很迷茫…通过对大佬题解的学习,学习到三种方法可以解题,最先学会的是循环直接运算的方法,这种方法我感觉好理解一些;第二种是斐波那契数列的解法,这种方法需要看出这个斐波那契数列的规律之后也是挺好写出来的;第三种就是第一种循环的递归写法,感觉递归会比循环稍微难理解一些…

相关知识的链接:
BigDecimal中divide方法详解.
BigDecimal.setScale用法.
蓝桥杯 黄金连分数(java题解).

要点总结

1.BigDecimal类的使用
2.题意的理解,当除的值一定大时结果稳定
3.斐波那契规律的总结

代码

第一种 循环做法

public static void main(String[] args) {
        //定义大范围数值
        BigDecimal bt=new BigDecimal(1);
        //循环操作1000次
        //这里的一千可以是其他数,只要实验一个数几次发现结果不在发生变化就可以
        for (int i=0;i<1000;i++){
            //前头加一的操作(注意大数的加减乘除方式)
            bt=bt.add(BigDecimal.ONE);
            //大数值类型的除法操作
            // ONE表示1,作被除数
            // bt为除数
            // 100位小数点后保留的位数
            // BigDecimal.ROUND_HALF_DOWN为小数值取舍类型,使用的这个类型为:四舍五入,2.35保留1位,变成2.3
            //HALF_DOWN意思是一半的向下取,所以2.35变为2.3,同样的如果是HALF_UP,就是一半的向上取,2.35变为2.4
            bt=BigDecimal.ONE.divide(bt,100,BigDecimal.ROUND_HALF_DOWN);
        }
        System.out.println(bt);
    }

第二种 斐波那契数列

public static void main(String[] args) {
        BigInteger firNum=BigInteger.ONE;
        BigInteger secNum=BigInteger.ONE;
        BigInteger res=BigInteger.ZERO;

        //斐波那契数列找到合适除数与被除数(尽可能的大)
        for (int i=0;i<1000;i++){
            res=firNum.add(secNum);
            firNum=secNum;
            secNum=res;
        }

        System.out.print("0.");
        //模拟实现手动除法
        for (int i=0;i<102;i++){
            BigInteger b=firNum.divide(secNum);
            BigInteger Ten=BigInteger.TEN;
            firNum=(firNum.mod(secNum).multiply(Ten));
            //要进行结尾进位的考虑
            if(i!=0&&i!=100){
                System.out.print(b);
            }
            else if(i==100){
                BigInteger temp=b;
                b=firNum.divide(secNum);
                if(b.intValue()>5){
                    System.out.print(temp.intValue()+1);
                }
                else
                    System.out.print(temp);
                break;
            }
        }
    }

第三种 递归

public static void main(String[] args) {
        res=f(500);
        res=res.setScale(100,BigDecimal.ROUND_HALF_UP);
        System.out.println(res);
    }
    public static BigDecimal res=new BigDecimal(1);
    public static BigDecimal res1=new BigDecimal(0);

    public static BigDecimal f(int n){
        if(n==1){
            return res;
        }
        BigDecimal a=new BigDecimal(1);
        return res1=a.divide((a.add(f(n-1))),1000,BigDecimal.ROUND_HALF_DOWN);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第四届蓝桥杯JavaB组省赛-黄金连分数 的相关文章

随机推荐

  • Apache apisix默认密钥漏洞(CVE-2020-13945)

    目录 漏洞描述 影响版本 漏洞复现 声明 本文仅供学习参考 其中涉及的一切资源均来源于网络 请勿用于任何非法行为 否则您将自行承担相应后果 本人不承担任何法律及连带责任 漏洞描述 Apache APISIX 是一个动态 实时 高性能的 AP
  • tensorflow1.14(一、初识)

    默认图与自定义图 import tensorflow as tf a tf constant 1 b tf constant 3 c tf constant 5 name name1 d tf constant 7 name name1 n
  • 第八讲:神州三层交换机静态路由配置

    静态路由是指由网络管理员手工配置的路由信息 当网络的拓扑结构或链路状态发生变化时 网络管理员需要手工修改路由表中的静态路由信息 静态路由信息在默认情况下不会传递给其他路由器 静态路由一般适用于比较简单的网络环境 静态路由的优点 使用静态路由
  • 使用idea创建java web项目

    创建web项目有很多方法 就说一个最简单的方法吧 创建一个java项目 点击创建 右击项目选择添加框架支持 勾选上web应用程序 点击确定 再点击当前文件 编辑配置 点击加号 选择Tomcat服务器 本地 也可以选择其他服务器 点击配置 选
  • 软件测试知识(二)

    软件开发阶段一般又划分成需求分析 概要设计 详细设计 编码与单元测试 组装与系统测试以及安装与验收等6个阶段 系统测试是将软件系统与硬件 外设和网络等其他因素结合 对整个软件系统进行测试 常见的系统测试主要有恢复测试 安全性测试 强度测试
  • 求解三位正整数各位之和

    描述 从键盘上输入一个三位整数 分别求出其的个位 十位和百位数字 并计算三位数字之和 输出格式 使用 format格式输出 请参阅输入输出示例 n input l list n a 0 for i in l a eval i a print
  • Centos5.8 x86_64下安装DRBD+Heartbeat+NFS

    实验环境 vmware workstation os Centos5 8 x86 64 编辑两台虚拟机分别新增一块网卡作为心跳检测 新增一块4G的硬盘 大小保持一致 两台机器的基本情况如下所示 centos1 mypharma com 19
  • python之路 第三章 逻辑判断语句——布尔类型和比较运算符、if语句、if else、if elif else、嵌套

    目录 第三章 逻辑判断语句 01 布尔类型和比较运算符 02 If语句的基本格式 03 if else语句 04 if elif else组合使用的语法 05 判断语句的嵌套 第三章 逻辑判断语句 01 布尔类型和比较运算符 在生活中 我们
  • Feign接口方法返回值设置

    Feign接口方法返回值设置 一 介绍 随着微服务的广泛应用 越来越多的企业都会使用微服务进行项目开发 在各个服务之间需要通过feign来进行通信 所以在feign调用接口中方法会接受其他服务接口不同类型返回值 二 返回值设置 1 依据被调
  • el-table实现跨页全选

    el table实现跨页全选 在开发中 我们会遇到一些需要全选表格的需求 由于我们使用了后端分页 在选中时需要维护一个数组 便于回写 但是我们有时需要跨页全选 一个按钮选中所有 我们维护的数组如果从后台拿到所有数据去维护的话这样我们的性能就
  • idea中回退git历史版本并删除历史提交记录

    本篇文章主要介绍git在idea中的回退历史版本 适用场景为代码提错分支 正常回退版本都可适用 回退前先检查一下本地分支是否和远程分支对应 否则会失败 1 打开idea中git历史提交窗口 快捷键 alt 9 有改动则是自己改的快捷键 2
  • 逍遙安卓和Charles實現https抓包

    Charles是一款来自国外的非常强大抓包神器 具有十分简洁的界面 直观易用 通过这款软件可以帮助用户方便地进行抓包 它可以轻松记录浏览器和Internet之间的所有流量 是非常专业并基于java开发网络http抓包工具软件 非常适合开发人
  • conda使用详细

    目录 Anaconda环境变量 一 常用命令 1 创建Python虚拟环境 2 切换环境 3 对虚拟环境中安装额外的包 4 关闭虚拟环境 即从当前环境退出返回使用PATH环境中的默认python版本 5 删除虚拟环境 6 克隆虚拟环境 7
  • 教你如何简单的在windows 10使用Debug

    很多有Windows 10 系统的小伙伴都想要学习汇编 那么怎样搭建debug环境好呢 小编发现 很多这种类似的教程都是叫你去安装Dosbox 这就有一篇教你用用这种方法搭建的 但是不好的事那个界面有点让小编看着不舒服 当然你也可以选择使用
  • 移动端开发同后端交互安全机制记录

    前言 这两年移动端开发的热度明显不如前几年 而且混合式开发框架诸如appcan的兴起在一定程度上降低了移动端开发的门槛 而最近更加流行的React开发更是把移动端原生开发的热度拉低很多 基于React Native构建的移动APP无论是在体
  • Chrome 和 Chromium 区别

    Chromium Chromium 官网 https www chromium org Chromium 源码 https github com chromium chromium Chromium是谷歌的开源项目 由开源社区维护 拥有诸多
  • 支付宝妥协被银联“收编” 网联“尴尬”吗?

    据上海证券报从知情人士处证实 中国银联与支付宝已于9月10日举行内部签约仪式 就支付清算业务达成了相关合作 这也意味着 两大支付巨头 支付宝和微信支付均被合法清算组织 银联和网联 收编 对此 银联和支付宝方面昨日均表示 不作回应 但值得注意
  • 解决错误提示“error: #5: cannot open source input file “core_cmInstr.h“: No such file or directory“方法

    今天来分享一个我们在初期开发单片机时候遇到的一个很常见的错误 就是提示 error 5 cannot open source input file core cmInstr h No such file or directory 错误信息
  • AIGC数字人直播 ChatGPT MDJOURNey技术学习待续

    AIGC数字人直播 ChatGPT MDJOURNey技术学习待续
  • 第四届蓝桥杯JavaB组省赛-黄金连分数

    第四届蓝桥杯JavaB组省赛 黄金连分数 题目描述 题目描述 黄金分割数0 61803 是个无理数 这个常数十分重要 在许多工程问题中会出现 有时需要把这个数字求得很精确 对于某些精密工程 常数的精度很重要 也许你听说过哈勃太空望远镜 它首