/*题目
寻找某两个数相除,其结果 离黄金分割点 0.618最近
分母和分子不能同时为偶数
分母和分子 取值范围在[1-20]*/
[Java] 纯文本查看 复制代码 /*题目
寻找某两个数相除,其结果 离黄金分割点 0.618最近
分母和分子不能同时为偶数
分母和分子 取值范围在[1-20]*/
public class HuangJinBiLi {
public static void main(String[] args) {
double shang = 0;//储存a和b的商
double chaZhi = 0;//储存和0.618的差值
double mina = 0;//储存当差值最小时a的值
double minb = 0;//储存当差值最小时b的值
double min = 1000;//判断和储存最小的差值
//嵌套循环,遍历所有的除法可能性
for (double a = 1; a <= 20; a++) {
for (double b = 1; b <= 20; b++) {
//判断a和b是否全为偶数,即至少有一个奇数即可
if (a % 2 != 0 || b % 2 != 0) {
shang = a / b;
//两个办法,一个是先判断商和0.618的大小,再进行相减
//二是利用三元运算符进行判断正负和取正
/* if (shang > 0.618) {
chaZhi = shang - 0.618;
} else {
chaZhi = 0.618 - shang;
}*/
//先取差值,再三元运算符进行判断正负和取正如果为负就0-差值,即可得正
chaZhi = shang - 0.618;
chaZhi = chaZhi < 0 ? 0 - chaZhi : chaZhi;
//判断差值最小的情况,如果和chaZhi比较后差值更小,则进行储存
if (min > chaZhi) {
min = chaZhi;
mina = a;
minb = b;
}
}
}
}
System.out.println(min + " " + mina + " " + minb);
}
}
|