黄金分割点

黄金分割点

寻找某两个数相除,其结果离黄金分割点 0.618最近,分母和分子不能同时为偶数,分母和分子取值范围在[1-20]

public class HelloWorld {
    
    
    public static void main(String[] args) {
    
    
 
        // 寻找某两个数相除,其结果 离黄金分割点 0.618最近
        //
        // 分母和分子不能同时为偶数
        // 分母和分子 取值范围在[1-20]
        int range = 20; // 取值范围
        float breakPoint = 0.618f; // 黄金分割点
 
        float minDiff = 100; // 离黄金分割点的差值
        int answerFenzi = 0; // 找到的分子
        int answerFenmu = 0; // 找到的分母
        for (int fenzi = 1; fenzi <= range; fenzi++) {
    
    
            for (int fenmu = 1; fenmu <= range; fenmu++) {
    
    
                // 分母和分子不能同时为偶数
                if (0 == fenzi % 2 & 0 == fenmu % 2)
                    continue;
 
                // 取值
                float value = (float) fenzi / fenmu;
                // 取离黄金分割点的差值
                float diff = value - breakPoint;
                // 绝对值
                diff = diff < 0 ? 0 - diff : diff;
 
                // 找出最小的差值
                if (diff < minDiff) {
    
    
                    minDiff = diff;
                    answerFenzi = fenzi;
                    answerFenmu = fenmu;
                }
            }
        }
 
        System.out.println("离黄金分割点(" + breakPoint + ")最近的两个数相除是:" + answerFenzi + "/" + answerFenmu + "="
                + ((float) answerFenzi / answerFenmu));
 
    }
}

猜你喜欢

转载自blog.csdn.net/Fy_atto/article/details/112850753