题目描述:
n 个人围成一圈, 并依次编号1~n,从编号为1 的人开始,按顺时针方向每隔一人选出一个,当一圈结束之后,剩下的人重新围成一圈,再次从编号1的人开始,如此循环直到剩下两人,这剩下的两人就是幸运儿。如果你想成为最后两个幸运儿,请问开始时应该站在什么位置?(设3<=n<=50)
解题思路:
然后模拟一下过程(红色字是被删除的,黑色字是剩下的)

选出顺序是:2 4 6 8 10 3 7 11 5
剩下的幸运儿:1 9
其实可以发现,1是不会被删掉的,因为每隔一个人删一次,所以我们删除的时候就把第一个元素略过,删除元素最后只剩下两个元素的时候就结束
代码:
- package lanqiao;
-
- import java.util.*;
-
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- while(sc.hasNext())
- {
- int n = sc.nextInt();
- ArrayList m = new ArrayList();
- for(int i = 1;i <= n;i ++)
- {
- m.add(i);
- }
- while(m.size() > 2)
- {
- for(int i = 1;i < m.size();i ++){
- if(m.size() == 2) break;
- System.out.print(m.get(i) + " ");
- m.remove(i);
- }
- }
-
- System.out.println();
- System.out.println(m.get(0) + " " + m.get(1));
- }
- }
- }