第十届蓝桥杯(省赛)之Fibonacci数列和黄金分割
创始人
2025-05-31 08:54:12
0

 一、version1

遇到的问题

  • F数组存储的数据超过long表示范围
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;public class ExaminationF {//public static int N = 2000000000;//java.lang.OutOfMemoryError: Java heap spacepublic int N ;//java.lang.OutOfMemoryError: Java heap spacepublic long[] F;public  long fibonacci(int n){if (n == 1 || n == 2){return 1;}if (F[n] != 0) {return F[n];}if (F[n] == 0)F[n] = fibonacci(n-1)+fibonacci(n-1);return F[n];}public ExaminationF(int n) {N = n;F = new long[N+5];}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();ExaminationF examinationF = new ExaminationF(n);//System.out.println(examinationF.F.length);examinationF.F[1] = examinationF.F[2] = 1;examinationF.fibonacci(n+1);System.out.println(String.format("%7f",examinationF.F[n]*1.0/ examinationF.F[n+1]));System.out.println(new BigDecimal(examinationF.F[n]*1.0/examinationF.F[n+1]+"").setScale(8));}
}

二、version2

遇到的问题

  • java中的默认类型:整数类型是int、浮点类型是double。
    当 n 越大时,两数之间的除法越接近黄金比例,也就是说 n 越大,最后的结果变化越来越小,即数值的变化离小数点越远
    i = 21之后小数点后10位不再变化
    float类型有8位有效数字,第七位将产生四舍五入(5及5以下的都将舍去
public class ExaminationF_2 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();long[] F = new long[n+5];F[1] = F[2] = 1;for (int i = 3; i <= n+1; i++) {F[i] = F[i-1] + F[i-2];System.out.println("i="+i+"\t"+new BigDecimal(F[i-1]*1.0/F[i]+"").setScale(8,BigDecimal.ROUND_HALF_UP));}}
}
//30
//i=3  0.50000000
//i=4  0.66666667
//i=5  0.60000000
//i=6  0.62500000
//i=7  0.61538462
//i=8  0.61904762
//i=9  0.61764706
//i=10 0.61818182
//i=11 0.61797753
//i=12 0.61805556
//i=13 0.61802575
//i=14 0.61803714
//i=15 0.61803279
//i=16 0.61803445
//i=17 0.61803381
//i=18 0.61803406
//i=19 0.61803396
//i=20 0.61803400
//i=21 0.61803399
//i=22 0.61803399
//i=23 0.61803399
//i=24 0.61803399
//i=25 0.61803399
//i=26 0.61803399
//i=27 0.61803399
//i=28 0.61803399
//i=29 0.61803399
//i=30 0.61803399
//i=31 0.61803399

三、version

import java.math.BigDecimal;
import java.util.Scanner;public class ExaminationF_3 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();long[] F = new long[n+5];F[1] = F[2] = 1;if (n <= 20) {for (int i = 3; i <= n+1; i++)F[i] = F[i-1] + F[i-2];System.out.println(new BigDecimal(F[n]*1.0/F[n+1]+"").setScale(8,BigDecimal.ROUND_HALF_UP));}else {System.out.println(0.61803399);}}
}

 

参考材料

蓝桥杯:Fibonacci数列与黄金分割_尐镇做题家的博客-CSDN博客

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...