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);
}
}
运行结果: