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

将真分数分解为埃及分数

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

import math
def fenjie(n):
    r = [1]
    for i in range(2,int(n//2)+1):
        if n%i == 0:
            r.append(i)
    return r

def beibao(pocket, total):
    # 只有前n个,total 为是否可行
    n = len(pocket)
    if total == 0:
        return True,[]
    else:
        if n == 0:
            return False,[]
        if n == 1:
            if total == pocket[0]:
                return True,[pocket[0]]
            else:
                return False,[]
        if n > 1:
            if sum(pocket) < total:
                return False,[]
            if total >= pocket[-1]:
                m1 = beibao(pocket[0:-1], total)
                m2 = beibao(pocket[0:-1], total-pocket[-1])
                if m1[0]:
                    return True,m1[1]
                elif m2[0]:
                    return True,m2[1] + [pocket[-1]]
                else:
                    return False,[]
            else:
                m1 = beibao(pocket[0:-1], total)
                if m1[0]:
                    return True,m1[1]
                else:
                    return False,[]

def main(zi,mu,i):
    total = zi*i
    pocket = fenjie(mu*i)
    return beibao(pocket, int(total))

while True:
    try:
        s = list(map(int,input().strip().split('/')))
        zi,mu = s[0],s[1]
        g = math.gcd(zi,mu)
        if g == zi:
            print(str(1)+'/'+str(mu//zi))
        else:
            zi /= g
            mu /= g
            zi,mu = int(zi),int(mu)
            i = 2
            while True:
                flag,result = main(zi,mu,i)
                if not flag:
                    i += 1
                else:
                    result.sort(reverse=True)
                    break
        for k in range(len(result)):
            tmp = mu*i // result[k]
            result[k] = '1'+'/'+str(tmp)
        print('+'.join(result))
    except:
        break
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-18 12:01
点赞 评论 收藏
分享
06-26 17:24
已编辑
宁波大学 golang
迷失西雅图:别给,纯kpi,别问我为什么知道
点赞 评论 收藏
分享
06-23 11:43
门头沟学院 Java
allin校招的烤冷...:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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