public class Count3Quit2 { public static void main(String[] args) {
int kids = 500;
int quiteNum = 3; boolean[] quiteFlag = new boolean[kids];
for (int i = 0; i < quiteFlag.length; i++) {
quiteFlag[i] = false;
} int pos = -1;
for (int i = 0; i < 500; i++) {
for (int j = 0; j < quiteNum; j++) {
while (true) {
pos++;
if (pos >= kids) {
pos = 0;
}
if (!quiteFlag[pos]) {
break;
} }
}
quiteFlag[pos] = true;
System.out.printf("第%d次第%d个小孩退出\n", i + 1, pos + 1);
}
}
}
这是我写的一个程序,直接用一个标志数组和循环来实现的,没搞你那么多类和方法。

解决方案 »

  1.   

    不好意思,改了一下
    public class Count3Quit2 { public static void main(String[] args) {
    int kids = 500;
    int quiteNum = 3; boolean[] quiteFlag = new boolean[kids];
    for (int i = 0; i < quiteFlag.length; i++) {
    quiteFlag[i] = false;
    } int pos = -1;
    for (int i = 0; i < kids; i++) {
    for (int j = 0; j < quiteNum; j++) {
    while (true) {
    pos++;
    if (pos >= kids) {
    pos = 0;
    }
    if (!quiteFlag[pos]) {
    break;
    } }
    }
    quiteFlag[pos] = true;
    System.out.printf("第%d次第%d个小孩退出\n", i + 1, pos + 1);
    }
    }
    }for循环中写了一个500的常量,实际应该用kids。
      

  2.   

    public static void main(String[] args) {
        int n = 500, m = 3;
        int index = 0;
         
        for (int i = 2; i <= n; i++) {
            index = (index + m) % i;
        }
         
        System.out.println(index + 1);
    }约瑟夫问题