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个人围成一圈,从某一个人开始数,数到第三个人让他离开这个圈,然后从下一个人继续数,同样是第三个人离开,这样一直下去,直到剩下一个人,问这个人在第几个位置(相对于开始数的起点)?
你犯了一个基本的错误 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;
}
}
}