HBC15595新约瑟夫环题解

凸凸曼凸凸 算法基础篇 43 0
不断提升技能,才能在职场中立于不败之地!全网最全C++题库,助您成为编程领域的佼佼者。
讲一个比较有意思的故事:约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒,一群人表决说要死,所以用一种策略来先后杀死所有人, 于是约瑟夫建议:每次由其他两人一起杀死一个人,而被杀的人的先后顺序是由抽签决定的,约瑟夫有预谋地抽到了最后一签,在杀了除了他和剩余那个人之外的最后一人,他劝服了另外一个没死的人投降了

讲一个比较有意思的故事:约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后杀死所有人。 于是约瑟夫建议:每次由其他两人一起杀死一个人,而被杀的人的先后顺序是由抽签决定的,约瑟夫有预谋地抽到了最后一签,在杀了除了他和剩余那个人之外的最后一人,他劝服了另外一个没死的人投降了罗马。我们这个规则是这么定的: 在一间房间总共有n个人(编号0~n-1),只能有最后一个人活命。 按照顺时针的顺序时,编号就是从小到大的。 按照如下规则去杀人: •      所有人围成一圈 •      顺时针(或逆时针)从1开始报数,每次报到q的人将被杀掉(顺时针逆时针交替进行,默认先进行顺时针) •      被杀掉的人将从房间内被移走 •      然后从新方向上的下一个人开始重新报数,报到q的被杀掉,直到剩余一人 你要做的是:当你在这一群人之间时,你必须选择一个位置以使得你变成那剩余的最后一人,也就是活下来。

HBC15595新约瑟夫环题解
-第1张图片-东莞河马信息技术
(图片来源网络,侵删)

标签: HBC15595新约瑟夫环题解