您的位置:首页 > 编程语言 > Java开发

20171223Java基础学习——编程题练习<黄金分割比>

2017-12-27 07:31 417 查看
[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】长;三目表达式简洁清晰。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: