有1到100共100个数, 从1开始, 每隔1, 2, 3... 个数拿走一个数, 最后剩下几?

有1到100共100个数, 从1开始, 每隔1, 2, 3, 4 ... 个数拿走一个数, 一直循环, 最后剩下几?
就是说, 一开始把 1 拿走, 隔1个数(2), 把3拿走, 再隔2个数(4, 5), 把6拿走, 再隔3个数(7, 8, 9)把10拿走. 数到100之后再返回来从2开始循环, 直到最后剩下1个数为止, 请问最后剩下几? 如果是1到n呢?
请用Java编程解决.
求大神帮忙

public static void compute(int n) {
    ArrayList<Integer> number = new ArrayList<>();
    for (int i = 1; i <= n; i++) {
        number.add(i);
    }
    while (number.size() > 1) {
        int index = 0;
        int count = 0;
        while (index < number.size()) {
            number.remove(index);
            count++;
            index = count * (count + 1) / 2;
        }
    }
}

    public static void compute(int n) {
        ArrayList<Integer> number = new ArrayList<>();
        for (int i = 1; i <= n; i++) {
            number.add(i);
        }
        while (number.size() > 1) {
            int index = 0;
            int count = 0;
            while (index < number.size()) {
                number.remove(index);
                count++;
                index = count * (count + 1) / 2;
            }
        }
    }

public class Person {
    private int id;
    private boolean live;

    public Person(int id, boolean live) {
        this.id = id;
        this.live = live;
    }

    public boolean isLive() {
        return live;
    }

    public void setLive(boolean live) {
        this.live = live;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

}
 import java.util.ArrayList;
import java.util.List;

public class CountNumber {
    public static final int NUMBER = 100;

    List<Person> persons = new ArrayList<Person>();

    public static void main(String[] args) {
        CountNumber cn = new CountNumber();
        cn.add();
        cn.deals();
    }

    public void deals() {
        while (persons.size() != 1) {
            deal();
        }
        System.out.println("最后留下的数字是:" + persons.get(0).getId());
    }

    public void deal() {
        int count = 1;// 计数器
        int index = 0;// 指示器

        while (index < persons.size()) {
            persons.get(index).setLive(false);
            count++;
            index += count;
        }

        for (int i = 0; i < persons.size(); i++) {
            if (persons.get(i).isLive() == false) {
                persons.remove(i);
            }
        }
    }

    public void add() {
        for (int i = 1; i < NUMBER+1; i++) {
            Person p = new Person(i, true);
            persons.add(p);
        }
    }
}

自己写的,只是测试3个数,6个数的情况,其他没有测试,所以不保证对,参考下,最后的输出为94(100个数)

好吧, 如果有人还对这个题有兴趣我就公布一下100个数最后剩下的是31