求高手

潇洒欧兄 2012-11-02 05:45:57
黄金分割数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
...全文
162 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
nmyangym 2012-11-04
  • 打赏
  • 举报
回复
菜鸟写了一个,参考一下:


public class GoldenCut
{
	static double MIN=0.6180335;
	static double MAX=0.6180344;
	public static void main(String[] args)
	{
		String str=null;
		String temp=null;
		LucasQueue lq=new LucasQueue();
		for(int i=3;;i++)
		{
			str=lq.getStringOfValue(lq.value(i));
			temp=str.substring(0,8);			//截取9位(带小数点)。
			double d=Double.parseDouble(temp);
			if(d>=MIN&&d<=MAX)
			{
				System.out.println(""+lq.getNumber(i-1)+"/"+lq.getNumber(i));
				System.out.println(""+lq.getNumber(i-1)+ "是第 "+(i-1)+"项,"+lq.getNumber(i)+" 是第 "+i+" 项");
				break;
			}

		}
	}
}
class LucasQueue
{
	private static int LENGTH=9;

	//鲁卡斯队列,1,3,4,7。。。。。。
	//
	public int getNumber(int i)
	{
		if(i<=1)
		{
			return 1;
		}
		else if(i==2)
		{
			return 3;
		}
		else
		{
			return getNumber(i-1)+getNumber(i-2);		//递归计算。
		}
	}
	//计算第i-1项与第 i项的比值。
	//
	public double value(int i)
	{
		int number1=getNumber(i-1);
		int number2=getNumber(i);
		return ((double)number1/(double)number2);
	}
	//返回double型的字符串形式,长度小于九,后面补零。
	//
	public String getStringOfValue(double x)
	{
		String str=Double.toString(x);
		if(str.length()<LENGTH)
		{
			StringBuffer sb=new StringBuffer(str);
			for(int i=0;i<LENGTH-str.length();i++)
			{
				sb.append('0');
			}
			str=sb.toString();
		}
		return str;
	}
}
响当当滴 2012-11-03
  • 打赏
  • 举报
回复
元芳,CSDN新论坛上线!你怎么看?

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧