一道挺好玩的题,可用来作面试题【来自20111224 Topcoder DIVI 250题】
有N个数,编号1到n。按照以下规则进行删除数,求最后剩下的那个数。【1<= n <= 1000000000】
规则:
1 . 如果当前序列的个数大于1,则删除所有序列中第平方数的位置的数。
2. 将进行1操作剩下的数,重新排在一起,重复操作1,直接当前序列数为1个数时,这个数就是结果。
例子: 如果现在是10个数
1 2 3 4 5 6 7 8 9 10 第一次删除 1 、4、9
=>2 3 5 6 7 8 10 第二次删除 2、6两个数,因为他们的位置是第1、4个数。
=>3 5 7 8 10 第三次删除 3、8两个数,原因同上。
=>5 7 10 第四次删除 5 这个数。
=>7 10
=> 10
这样最后的数就是10,就是要求的结果。
再给几个例子:
n = 6时,结果是 5.
n = 8 时,结果 是 7
n = 9 时,结果是 7
n = 20111223时,结果是 20110741
我觉得这个题有点意思,可以思考思考~
稍后会给出一个较好的参考答案思路。
【转载请注出处】

探讨一种特殊的筛选算法,从编号1到n的序列中逐步移除位于平方数位置上的元素,直至只剩下一个数字。通过实例演示了该算法的具体运作过程,并提供了不同n值下最终保留数字的示例。
2002





