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

将真分数分解为埃及分数

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

思路 递增的去 -1/2 -1/3这样,每次都计算减完之后的值是否可以分为 (n-1)/m + 1/m 例如 3/110 = 1/55 + 1/110

为了跟系统保持一致的像是2/4直接输出 1/3+1/6 所以在转换的时候,如果拿到的分数直接就是 1/n,那么就从 n+1开始循环去找

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 tokens = line.split('/').map(v => +v);
        if(tokens[1]%tokens[0] == 0){
            tokens = [1,tokens[1]/tokens[0]]
        }
        let arr = []
        // 思路 递增的去 -1/2    -1/3这样,每次都计算减完之后的值是否可以分为  (n-1)/m + 1/m 例如 3/110  = 1/55 + 1/110
        for(let i = 2;i<tokens[1]*10;i++){
            if(tokens[0]/tokens[1] > 1/i){
                let mu = add(tokens[1],i)
                let zi = mu/tokens[1]*tokens[0] - mu/i
                arr.push(i)
                if(zi == 1){
                    arr.push(mu)
                    break
                }
                if(mu%(zi-1) == 0){
                    arr.push(mu/(zi-1))
                    arr.push(mu)
                    break
                }
                tokens[0] = zi
                tokens[1] = mu
            }
        }
        console.log(arr.map(v => '1/'+v).join("+"))

        // 求最小公倍数
        function add(a,b){
            if(a>b){
                [a,b] = [b,a]
            }
            for(let i = a;i>1;i--){
                if(a%i == 0&& b %i == 0){
                    return a*b/i
                }
            }
            return a*b
        }
    }
}()

全部评论

相关推荐

05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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