一道Java算法题
有100个人围成一个圈(编号0-99),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩一个人为止,问此人原来的位置是多少号?
- class Test
- {
- public static void main(String[] args)
- {
- int count = 100;
- //剩余人数
- int leavings = count;
- int[] all = new int[count];
- //index人物编号,counter报数
- int index = 0, counter = 0;
- while (true)
- {
- //人物对应的值为-1表示出局
- if (all[index] != -1)
- {
- all[index] = index+1;
- counter++;
- }
- if (counter%3 == 0)
- {
- if (--leavings == 1)
- {
- System.out.println(index);
- break;
- }
- all[index] = -1;
- }
-
- index++;
- if (index == count-1)
- {
- index = 0;
- }
- }
- }
- }