圣诞送礼问题

该代码使用Python实现了一个确保每个人都能收到别人送出的礼物,且不会出现自己送给自己礼物的算法。通过随机抽取和条件判断,确保送礼和收礼的匹配,并在最后解决剩余两个人的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 这个问题要求一群人互相送礼还不能漏。

import random
sc = "ABCDEF"
result = {}
song = list(sc)
shou = list(sc)
count = 0
while song:
    i = random.randint(1, len(sc) - 1)
    j = random.randint(1, len(sc) - 1)
    if sc[i] in song and sc[j] in shou and i != j:
        a = sc[i]
        b = sc[j]
        result.update({a:b})
        print(f"同学{sc[i]}送了同学{sc[j]}一份礼物")
        song.remove(sc[i])
        shou.remove(sc[j])
        count = count + 1
        if count == len(sc)-2 :
            print(f"同学{song[0]}送了同学{shou[1]}一份礼物")
            print(f"同学{song[1]}送了同学{shou[0]}一份礼物")
            result.update({song[0]: shou[1]})
            result.update({song[1]: shou[0]})
            break
print(result)

我的思路是前面的一群人互相随机送,最后两位空置位互相送,不然会出现自己送自己的情况。

送礼为一个列表song = list(sc)
收礼也是一个列表shou = list(sc)

然后循环

while song:
    i = random.randint(1, len(sc) - 1)
    j = random.randint(1, len(sc) - 1)
    if sc[i] in song and sc[j] in shou and i != j:
        a = sc[i]
        b = sc[j]
        result.update({a:b})
        print(f"同学{sc[i]}送了同学{sc[j]}一份礼物")
        song.remove(sc[i])
        shou.remove(sc[j])

从送和收分别随机抽一个人,只要他们不是同一个人,就抽出来,分别赋给a,b,加进result字典一 一 对 应

再从送礼和收礼的两个列表把人删除

 count = count + 1
        if count == len(sc)-2 :
            print(f"同学{song[0]}送了同学{shou[1]}一份礼物")
            print(f"同学{song[1]}送了同学{shou[0]}一份礼物")
            result.update({song[0]: shou[1]})
            result.update({song[1]: shou[0]})
            break
print(result)

count是个计数单位,为了留出最后俩空

再让送礼和收礼的两个位置上的人互相交换

结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值