一个java入门编程小问题?

public class Count3Quit {
public static void main(String[] args) {
    boolean [] arr;
    arr = new boolean [500];
    for (int i = 0;i < arr.length;i++) {
        arr[i] = true;
    }

    int index = 0;
    int now = 0;
    int left = arr.length;
    while(left > 1) {
      if(arr[index] = true) {
        now = now + 1;
        if(now == 3) {
            arr[index] = false;
            left = left - 1;
            now = 0;
        }
      }
      index = index + 1;
      if(index == arr.length) {
        index = 0;
      }
    }

    for(int i = 0;i < arr.length;i++) {
        if(arr[i] = true) {
            System.out.println(i);
        }

    }
}
}

大侠们,自学java,又碰到一个不知道咋错的了,麻烦各位大神了。。。。 这个结果就是打印出了0到499

题目就是500个人围成一圈,从某一个人开始数,数到第三个人让他离开这个圈,然后从下一个人继续数,同样是第三个人离开,这样一直下去,直到剩下一个人,问这个人在第几个位置(相对于开始数的起点)?

阅读 3.7k
2 个回答

你犯了一个基本的错误 if(arr[index] = true) {

这里应该是==

没有试你的程序, 不知道还有没有别的问题

对应的问题,有对应的数据结构,这个题目出现在很多的招聘面试题目中,是一个经典的应用循环链表的示例。恰好有时间,写了一下代码。废话不多说,上代码,有问题,欢迎讨论:

public class thirdPersonOutGame {

public static void main(String[] args) {
    pointTheLastPerson(init(3), true);
}

static Person init(int totalPersonNum) {
    if(totalPersonNum <= 0) {
        throw new IllegalArgumentException("total person number can not be zero.");
    }

    Person head = new Person(1);
    Person prev = head;
    for(int i=2; i<=totalPersonNum; i++) {
        prev = prev.next(new Person(i));
    }
    prev.next(head);

    System.out.printf("total %d persons join the game\n", totalPersonNum);
    return head;
}

static void pointTheLastPerson(Person head, boolean whetherPrintQuitOrder) {
    Person prev = head;
    Person cur = head;
    int curIndex = 1;

    if(whetherPrintQuitOrder) { System.out.print("person out order: "); }
    while(cur.next != cur) {
        prev = cur;
        cur = cur.next;
        if(++curIndex == 3) {
            if(whetherPrintQuitOrder) {
                System.out.printf("%d ", cur.i);
            }
            cur = curPersonOut(cur, prev);
            curIndex = 1;
        }
    }
    if(whetherPrintQuitOrder) { System.out.println(); }

    System.out.printf("the last person: %d\n", cur.i);
}

static Person curPersonOut(Person cur, Person prev) {
    return prev.next = cur.next;
}

static class Person {
    int i;
    Person next;

    Person(int i) {
        this.i = i;
    }

    Person next(Person person) {
        return this.next = person;
    }
}
}
推荐问题
logo
101 新手上路
子站问答
访问
宣传栏