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

将真分数分解为埃及分数

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

网友有奇招!!!

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    while ((line = await readline())) {
        let [fenzi, fenmu] = line.split("/");
        // 第一种偷懒的方法,不推荐:5/11 = 1/11+1/11+1/11+1/11+1/11
        // let str = '';
        // for(let i=0; i<fenzi; i++){
        //     str = str + '1/' + fenmu + '+';
        // }
        // str = str.substring(0,str.length-1);
        // console.log(str);

        // 第二种,贪婪算法
        let str = "";
        if (fenmu % fenzi == 0) {
            let jianhua = fenmu / fenzi;
            str = "1/" + jianhua;
        } else {
            while (fenzi != 1) {
                // 先用网友妙法走一遍 3/110 分成 1/110 和 2/110, 其中2/110 = 1/55,直接就结束了!
                let jianyi = fenzi - 1;
                if (fenmu % jianyi == 0) {
                    str = str + "1/" + (fenmu / jianyi) + "+" + "1/" + fenmu;
                    fenzi = 1;
                } else {
                    // 网友妙法走不通,就走下面的循环
                    let zheng_new_fm = Math.floor(fenmu / fenzi) + 1; // 2
                    let zxgbs = zuiXiaoGongBeiShu(fenmu, zheng_new_fm); // 22
                    let xucheng = zxgbs / fenmu; // 22/11 = 2
                    let fenzi_chenghou = fenzi * xucheng; // 8*2 = 16;

                    let beijian = zxgbs / zheng_new_fm; // 22/2 = 11;
                    let left = fenzi_chenghou - beijian;
                    str = str + "1/" + zheng_new_fm + "+";
                    fenzi = left;
                    fenmu = zxgbs;
                    if (fenzi == 1) {
                        str = str + "1/" + zxgbs;
                    }
                }
            }
        }
        console.log(str);
    }
})();

function zuiDaGongYueShu(n, m) {
    // 辗转相除法 求最大公约数
    while (m !== 0) {
        let yushu = n % m;
        n = m;
        m = yushu;
    }
    return n;
}

function zuiXiaoGongBeiShu(n, m) {
    // 求最小公倍数
    return (n * m) / zuiDaGongYueShu(n, m);
}

全部评论

相关推荐

每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 11:30
仁者伍敌:kpi都懒得刷了属于是
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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