题解 | #将真分数分解为埃及分数#

将真分数分解为埃及分数

https://www.nowcoder.com/practice/e0480b2c6aa24bfba0935ffcca3ccb7b

import java.util.Scanner;

public class Main {
    private static StringBuilder result = new StringBuilder();

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);

        while(in.hasNext()){
            String[] fraction = in.nextLine().trim().split("/");
            // 分子
            Integer a = Integer.parseInt(fraction[0]);
            // 分母
            Integer b = Integer.parseInt(fraction[1]);

            result = new StringBuilder();

            solution(a, b);
        }
    }

    /**
     * 递归
     * @param a
     * @param b
     */
    private static void solution(Integer a, Integer b){
        egypt(a, b);

        System.out.println(result);
    }

    /**
     * 数学法: 真分数 -> 埃及分数
     * 
     * 算法:
     * 设某个真分数的分子为a, 分母为b;
     * 把c=(b/a+1)作为分解式中第一个埃及分数的分母;
     * 将a-b%a 或 a*c-b作为新的a;
     * 将b*c作为新的b;
     * 
     * 如果a=1, 则最后一个埃及分数为1/b, 算法结束;
     * 如果a>1 && b%a=0, 则最后一个埃及分数为1/(b/a), 算法结束;
     * 否则重复上面的步骤.
     * 
     * 优化: 当b%(a-1)=0时, a/b=1/(b/(a−1))+1/b, 则最后两个埃及分数为1/(b/(a-1))和1/b, 算法结束;
     * 
     * @param a   分子
     * @param b   分母
     */
    private static void egypt(Integer a, Integer b){
        // a=1 则最后一个埃及分数为1/b
        if(a == 1){
            result.append("1/"+b);
            return;
        }

        // a>1 && b%a=0 则最后一个埃及分数为1/(b/a)
        if(b%a == 0){
            result.append("1/"+b/a);
            return;
        }

        // b%(a-1)=0 则最后两个埃及分数为1/(b/(a-1))和1/b
        if(b%(a-1) == 0){
            result.append("1/"+b/(a-1)+"+1/"+b);
            return;
        }

        // 埃及分数的分母
        int c = b/a+1;
        result.append("1/"+c+"+");
        egypt(a-b%a, b*c);
        // egypt(a*c-b, b*c);
    }
}

全部评论

相关推荐

02-14 12:40
门头沟学院 Java
程序员花海:1.面试要求必须Java笔试不一定 2.难度对等秋招 远超于日常实习是因为同一批次且转正很多 竞争压力大 3.第一个加点指标,上线了就把接口性能加上去 使用本地缓存这个不算亮点 只是技术选型,要把为什么采用这个和背后的思考写出来而不是单纯堆叠技术没意义 4.八股要一直看 很容易忘记 5.拼团交易这个老问题 堆积技术 另外建议你把奖项合并到教育背景 没必要拆出来放最后
我的简历长这样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务