问题:
话说有一国王找到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 即可获释。