100个囚犯的脱狱问题

问题:

 

    话说有一国王找到100个囚犯,每个人都剃了光头。
    国王对他们说:一会儿有人会在你们头上写上1-100之间的随机数。你们只要有一个人能说对大家头上所有数字的和,就都放了。否则统统赠送给芙蓉姐姐做宠物。给你们一炷香的时间好好商量一下对策。
    这帮子囚犯都是学过基本算数的,加减乘除都没问题。
    一炷香之后,国王的巫师屏蔽了他们之间的交流(不要问我怎么做到的) - 结果每个囚犯都能看到别人头上写的啥,但没办法知道自己的数字。
    囚犯们采用什么策略才能保证一定会被释放呢?

 

解答:

 

    设100个囚犯头上数字的和为sum;第N个囚犯头上数字为 Pn ( 1 <= Pn <= 100 ),除第 N 个囚犯数字和为Tn,则 sum = Pn + Tn,则 Pn = sum - Tn 成立,即 Pn - 1 = sum - Tn - 1。因为 0 <= Pn - 1 <= 99,所以 ( Pn - 1 )%100 = Pn - 1 = sum%100 - Tn%100 - 1,也即 Pn = sum%100 - Tn%100。
    因为 0 <= sum%100 <= 99,sum%100是唯一的,令:
        第一个犯人:P1 = -( T1 % 100 ) + 0
        第二个犯人:P2 = -( T2 % 100 ) + 1
        ...
        第100个犯人:P100 = -( T100 % 100 ) + 99
    则 Pn 中必有一个是某囚犯自己头上的数字,每个人提交 Pn+Tn 即可获释。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值