100人围成一圈,他们的编号分别为1至100,此100人从1号起按顺时针方向进行1、2报数,报2走报1留,不断反复下去直到一人留下.问此人原先排在什么位置?

问题描述:

100人围成一圈,他们的编号分别为1至100,此100人从1号起按顺时针方向进行1、2报数,报2走报1留,不断反复下去直到一人留下.问此人原先排在什么位置?

这个是抽杀问题.
如果人数刚好是2的N次方的时候,留下的人数恰好是1号.
(这个你可以试试,比如人数是4人和人数是8人的时候,留下的都是1号.)
100以内2的N次方最大是2^6=64,所以现在我们就先减去100-64=36人,
(目的是剩下64人,我们把剩下的64人重新编号,那么一定是1号留下.)
若是想减去36人,应该减去的最后一个是36*2=72号,
这时,我们把73号看作是1号,一共还剩下64人,所以最后剩下的就是73号.