抢红包的线段切割算法

把红包总金额想象成一条很长的线段,而每个人抢到的金额,则是这条主线段所拆分出的若干子线段。

def qianghb(M,N):
    M=M*100  #扩大100倍,取整
    if N>M:
        return '无法分配!'

    xianduan=[]
    s=0
    while s<(N-1):
        x=random.randint(1,M-1) # 不能低于1,不能高于总额,
        if x not in xianduan: #不能重复
            xianduan.append(x)
            s+=1
    xianduan.sort()  #排序
    xianduan.append(M) #最后一位收底

    jg=[] 
    s=0
    for y in range(N):  #切线段
        jg.append(round((xianduan[y]-s)/100,2))
        s=xianduan[y]
        
    return jg

print(qianghb(5,4))

posted on 2020-07-15 16:17  耀扬  阅读(543)  评论(0编辑  收藏  举报

导航