您的位置:首页 > 编程语言 > Java开发

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

2013-03-17 23:34 323 查看
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:

import java.io.FileWriter; 

import java.io.IOException;
 
public class Num1 { 

 
    /**
     * @param args
     * @throws IOException
     */ 
    public static
void main(String[] args) throws IOException { 

        // TODO Auto-generated method stub 

          double a=1,b=3; 

          double c; 

          while(!(a/b<=0.6180344&&a/b>=0.6180335)){ 

                  c=a+b;           
                  a=b; 
                  b=c; 
          } 
        System.out.print(a+"/"+b);   

        FileWriter fw=new FileWriter("E:\\寒假学习\\软件大赛\\2012Java本科\\1\\解答.txt"); 

        fw.write(String.valueOf((int)a)+"/"+String.valueOf((int)b)); 

        fw.flush(); 
        fw.close(); 
    } 
 

运行结果只有一个:

1364/2207

 

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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  蓝桥杯 java 预赛 算法