假设一共有N只猴子。从第一只猴子开始报数。其中报到数字n的猴子离开。然后下一只猴子仍然从一开始报起。。当报完最后一只猴子时。第一只猴子接着最后一只猴子报数。请问最后留下的猴子是第几只?
例如一共有4只猴子。报到3的猴子离开。
那么首先第3只猴子离开。第4只猴子报1。接着第一只猴子继续报2。第二只猴子报3离开。第四只猴子报1。第一只猴子报2。第四只猴子报3。
结果就是第一只猴子留下。这个问题很简单啊。。希望大家写出最简单的算法啊。。

解决方案 »

  1.   

    public static void search(int N, int n, int pos) {
    pos = (((pos + n - 1) % N) == 0) ? N : (pos + n - 1) % N;
    Vector v = new Vector();
    for (int i = 0; i < N; i++) {
    v.addElement("第 " + (i + 1) + " 只猴子剩下了.");
    }
    while (v.size() > 1) {
    v.removeElementAt(pos - 1);
    if (pos + n - 2 < v.size()) {
    pos = pos + n - 1;
    } else {
    pos = (pos + n - 2) % v.size() + 1;
    }
    }
    System.out.println(v.elementAt(0));
    }