20171223Java基础学习——编程题练习<黄金分割比>
2017-12-27 07:31
417 查看
[Q]寻找某两个数相除,其结果离黄金分割点 0.618最近。需满足:
分母和分子不能同时为偶数
分母和分子 取值范围在[1-20]
[A]:
[改进]
1.将第3行的float i, j直接放到for循环嵌套中,这样可以节省内存空间?
2.第7~9行代码建议修改为:
这样做的好处有:if continue减少程序的冗【rong】长;三目表达式简洁清晰。
分母和分子不能同时为偶数
分母和分子 取值范围在[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】长;三目表达式简洁清晰。
相关文章推荐
- 黑马程序员java学习<基础加强>—交通灯
- 黑马程序员java学习<基础加强>—JavaBean
- java 从零开始,学习笔记之基础入门<内部类>(十四)
- java 从零开始,学习笔记之基础入门<Static>(十二)
- Java 基础一些代码练习笔记( GenericFoo<T> 泛型)
- java 从零开始,学习笔记之基础入门<Switch>(八)
- java 从零开始,学习笔记之基础入门<Date类_Calendar类>(十七)
- java 从零开始,学习笔记之基础入门<线程及实例分析>(十九)
- java 从零开始,学习笔记之基础入门<SQL_Server_常用查询>(二十二)
- java 从零开始,学习笔记之基础入门<集合>(十六)
- java 从零开始,学习笔记之基础入门<异常>(十五)
- java 从零开始,学习笔记之基础入门<对象_属性>(二)
- JAVA基础学习--IO流总结<二>
- java 从零开始,学习笔记之基础入门<IO流>(十八)
- java 从零开始,学习笔记之基础入门<封装类>(十一)
- Java 基础一些代码练习笔记( GenericFoo<T> 泛型2)
- java 从零开始,学习笔记之基础入门<运算符表达式和流程控制>(六)
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<SQL_Server>(二十一)
- java 从零开始,学习笔记之基础入门<信息的隐藏>(四)
- 黑马程序员java学习<基础加强>—泛型