第三届蓝桥杯预赛java组第一题黄金队列

Question:

    黄金分割数0.618与美学有重要的关系。舞台上报幕员所站的位置大约就是舞台宽度的0.618处,墙上的画像一般也挂在房间高度的0.618处,甚至股票的波动据说也能找到0.618的影子....

    黄金分割数是个无理数,也就是无法表示为两个整数的比值。0.618只是它的近似值,其真值可以通过对5开方减去1再除以2来获得,我们取它的一个较精确的近似值:0.618034

    有趣的是,一些简单的数列中也会包含这个无理数,这很令数学家震惊!

    1 3 4 7 11 18 29 47 .... 称为“鲁卡斯队列”。它后面的每一个项都是前边两项的和。

    如果观察前后两项的比值,即:1/3,3/4,4/7,7/11,11/18 ... 会发现它越来越接近于黄金分割数!

    你的任务就是计算出从哪一项开始,这个比值四舍五入后已经达到了与0.618034一致的精度。

    请写出该比值。格式是:分子/分母。比如:29/47

    答案写在“解答.txt”中,不要写在这里!

 

Answer:

package com.test1;

public class First {
 private static double result;
 public static void main(String[] args)
 {
  int i[]=new int[100];
  String string=" ";
  i[0]=1;i[1]=3;
  for(int j=2;j<30;j++)
  {
   i[j]=i[j-1]+i[j-2];
   result=(double)i[j-1]/i[j];
   string=new Double(result).toString();
   System.out.println(i[j-1]+"/"+i[j]+"="+string);
   //System.out.println(string);
  }
 }
}

 

Run Answer:

3/4=0.75
4/7=0.5714285714285714
7/11=0.6363636363636364
11/18=0.6111111111111112
18/29=0.6206896551724138
29/47=0.6170212765957447
47/76=0.618421052631579
76/123=0.6178861788617886
123/199=0.6180904522613065
199/322=0.6180124223602484
322/521=0.6180422264875239
521/843=0.6180308422301305
843/1364=0.6180351906158358
1364/2207=0.6180335296782963
2207/3571=0.6180341640996919
3571/5778=0.6180339217722395
5778/9349=0.6180340143330838
9349/15127=0.6180339789779864
15127/24476=0.6180339924824317
24476/39603=0.6180339873241926
39603/64079=0.6180339892944646
64079/103682=0.6180339885418877
103682/167761=0.6180339888293465
167761/271443=0.6180339887195471
271443/439204=0.6180339887614867
439204/710647=0.6180339887454671
710647/1149851=0.6180339887515861
1149851/1860498=0.6180339887492489

 

我想问:为什么j<30呢,j<40,j<50呢?就不可以吗?我试了一下,j<50的运行结果会出现负数?为什么?还有,最后的结果是?好像有挺多的啊?求赐教啊。。。

 

答案2:

  1. import java.io.FileWriter; 
  2. import java.io.IOException;
  3.  
  4. public class Num1 { 
  5.  
  6.     /**
  7.      * @param args
  8.      * @throws IOException
  9.      */ 
  10.     public static void main(String[] args) throws IOException { 
  11.         // TODO Auto-generated method stub 
  12.           double a=1,b=3
  13.           double c; 
  14.           while(!(a/b<=0.6180344&&a/b>=0.6180335)){ 
  15.                   c=a+b;           
  16.                   a=b; 
  17.                   b=c; 
  18.           } 
  19.         System.out.print(a+"/"+b);   
  20.         FileWriter fw=new FileWriter("E:\\寒假学习\\软件大赛\\2012Java本科\\1\\解答.txt"); 
  21.         fw.write(String.valueOf((int)a)+"/"+String.valueOf((int)b)); 
  22.         fw.flush(); 
  23.         fw.close(); 
  24.     } 
  25.  

运行结果只有一个:

1364/2207

 

不知道哪个才是正确的。。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值