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

将真分数分解为埃及分数

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 湖北

相关推荐

评论
36
3
分享
牛客网
牛客企业服务