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

将真分数分解为埃及分数

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

#解题思路:将真分数(a/b)拆分成a*(1/b),也就是a个1/b,然后我们从大到小依次找出a中能被B整除的数.
比如: 5/8 这个真分数首先我们看,5不能被8整除,但是4可以,那从5中把4分离出来,变成1+4,剩余的1不能拆分,那埃及分数就是1/8+1/2

再比如:7/8这个真分数,首先我们看,7不能被8整除,6不能被8整除,5不能被8整除,4可以整除,分子分离出4,还剩3,我们看3不能整除,2能整除,分离出2,还剩1, 埃及分数:1/8+1/4+1/2
翻译成以下代码:

import sys

for fs in sys.stdin.readlines():
    
    fzfm =fs.strip("\n").split("/")
    fz = int(fzfm[0])
    fm = int(fzfm[1])
    out_string = "" 
    num = fz
    zy = num
    contt = 0
    while True:
        try:
            if fm % zy == 0:
                if contt == 0:
                    out_string += ("1/" + str(fm // zy))
                else:
                    out_string += ("+1/" + str(fm // zy))
                    
                fz = fz - zy
                contt +=1
                zy = fz
                if fz == 0:
                    print(out_string)
                    break
                
            else:
                zy -= 1
                if zy == 0:
                    break
            
        except Exception:
            pass
    

全部评论
只适用分母为合数的情况,质数就不行了
1 回复 分享
发布于 2022-03-10 10:02
分母是质数的话就变成了1+1+1+1
1 回复 分享
发布于 2022-10-21 14:16 浙江
这样4/31没有可以整除的,答案是1/8+1/248
点赞 回复 分享
发布于 2022-01-29 17:50
那例子里的8/11怎么解释?
点赞 回复 分享
发布于 2022-03-05 12:45
要求结果递减,2/3,8/11这样就不行了。
点赞 回复 分享
发布于 2022-07-02 10:25
对于a/b应该先变为x/lcm(a,b),再执行这个算法就可以了
点赞 回复 分享
发布于 2022-08-31 16:46 北京
function sol(a:string,res:string[]):string[]{ let [up, down] = a.split('/').map(it => +it); if(up === 0) return res; if(up === 1) { res.push(a); return res } let i:number; for(i = up; i > 1; i--){ if(down % i === 0){ res.push(`1/${down/i}`); return sol(`${up - i}/${down}`, res) } } if(i === 1){ up *= 10; down *= 10; return sol(`${up}/${down}`, res) } } 根据这个思路写了js版本的
点赞 回复 分享
发布于 2023-02-02 15:38 湖北

相关推荐

10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
36
3
分享
牛客网
牛客企业服务