[Q]寻找某两个数相除,其结果离黄金分割点 0.618最近。需满足:
分母和分子不能同时为偶数
分母和分子 取值范围在[1-20]
[A]:
public class HelloWorld{
public static void main(String[] args) {
float i, j, m = 0 , n = 0.0f, min = 1.0f, value;
for(i = 1.0f; i <= 20.0; i++){
for(j = i + 1; j <= 20.0; j++){//取值在0.618附近式,分数值必小于1,故分母>分子
if(i % 2 != 0 || j % 2 != 0){//在分子分母不同时为偶数的前提下,再计算分数值
if(i / j > 0.618)value = i / j - 0.618f;
else value = 0.618f - i / j;//求分数值与黄金分割点的差值绝对值
if(value < min){//找出最小差值下的分子分母值
min = value;
m = i;
n = j;
}
}
}
}
System.out.println("离黄金分割点(0.618)最近的两个数相除是:"+(int)m+"/"+(int)n+"="+(m / n));
}
}
[改进]
1.将第3行的float i, j直接放到for循环嵌套中,这样可以节省内存空间?
2.第7~9行代码建议修改为:
if(i % 2 == 0 && j % 2 == 0)continue;//在分子分母不同时为偶数的前提下,再计算分数值
value = (i / j > 0.618f) ? (i / j - 0.618f) : (0.618f - i / j);//求分数值与黄金分割点的差值绝对值
这样做的好处有:if continue减少程序的冗【rong】长;三目表达式简洁清晰。

945

被折叠的 条评论
为什么被折叠?



