使用JAVA实现两整数相除得到的结果离黄金分割率0.618最接近,输出此时的分子分母

JAVA实现两数相除商离黄金分割率0.618最近,且分子和分母不能同时为偶数 分子和分母范围在1-20以内 输出此刻的分子和分母
实现这个例子时犯了很多细节错误 都写在代码注释里了 果然还要提高基础

package testtwo;
public class GoldenRatio {
	//寻求两个整数相除,其结果离黄金分割点0.618最近
	//分母和分子不能同时为偶数
	//分母和分子的取值范围在1-20内
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		double m;
		double n;
		double gold=0.618;
		double value;
		double i=0;
		double j=0;
		double temp=1;//创建一个副本,用来存储每一次的value,将初始值设为1 减少时间复杂度
		for(m=1;m<=20;m++) {
			for(n=1;n<=20;n++) {
				if(m%2==0&&n%2==0)//如果分母和分子都为偶数的话则跳过这一次循环
					continue;
				double shang=m / n;
				//大于0.168和小于0.618的数中都会有接近0.618的值 
				if(shang>gold)
					 value=shang-gold;
				else
					value=gold-shang;
				//temp=value //最开始想在这里添加一个用这样的表达式,于下面交换变量的比较条件
				//执行后发现结果有误,想了一会不能在这里将temp=value 这样下面if的条件永远为false无法执行了 果然基础还是不够牢固
				//double temp=1 不能将副本变量定义在for循环内 这样的话temp就位局部变量了,内部for循环结束就会被回收掉  最开始我翻了这个错误  琢磨半天发现这个问题
				if(value<temp) {
					temp=value;//更新要比较的值得
					i=m;
					j=n;
				}
				
					
				}
			
			
		}
		System.out.println("离黄金分割点0.618最近的分子是"+i+",分母是"+j);
	}

}

运行结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值