62,635
社区成员




public class Count3Quit {
public static void main(String args[]) {
boolean[] arr = new boolean[500];
for(int i=0; i<arr.length; i++) {
arr[i] = true;
}
int leftCount = arr.length; //队列剩余人数
int index = 0; //第几个,数到的位置
int countNum = 0; //计数器,数到3就退1个
while(leftCount > 1) {
if(arr[index] = true) {
countNum ++;
if(countNum == 3) {
countNum = 0;
arr[index] = false;
leftCount --;
}
}
index ++;
if(index == arr.length) {
index = 0;
}
}
/*
测试用:
System.out.println(leftCount);
System.out.println(arr[100]);
System.out.println(arr[101]);
System.out.println(arr[102]);
System.out.println(arr[103]);
System.out.println(arr[104]);
System.out.println(arr[105]);
System.out.println(arr[106]);
System.out.println(arr[107]);
System.out.println(arr[108]);
System.out.println(arr[109]);
System.out.println(arr[110]);
System.out.println(arr[111]);
System.out.println(arr[112]);
System.out.println(arr[255]);
*/
for(int i=0; i<arr.length; i++) {
if(arr[i] == true) {
System.out.println("最后留下来的是第" + String.valueOf(i+1) + "个");
}
}
}
}
public class Test06 {
/**
* 500个小朋友围城一圈,从1开始顺时针计数,当遇到3的倍数以及含有3的数字时,
* 该小朋友需退出游戏,直到剩余一个为止,求该小朋友第一圈计数的编号,计数器一直往上数,不归0。
*/
public static void main(String[] args) {
//初始化数组,true为当前剩余数
boolean [] arr = new boolean[500];
for(int i = 0;i<arr.length;i++) {
arr[i] = true;
}
//当前数数
int num = 0;
int index = -1;
while((index = endIndex(arr)) == -1) {
for(int i = 0;i<arr.length;i++) {
if (arr[i]) {
num++;
if (isMeetThree(num)) {
arr[i] = false;
//设置一次检查一次,否则跳出循环,防止剩下的NUM都是含有3开头的,例如30,31,32,.....
index = endIndex(arr);
if (index != -1) {
break;
}
}
}
}
}
System.out.println("当前剩余孩子编号:" + (index + 1));
}
/**
* 当为3的倍数,以及含有3时,返回true,否则返回false
*/
public static boolean isMeetThree(int num) {
if (num % 3 == 0) {
return true;
}
return String.valueOf(num).indexOf('3') != -1;
}
/**
* 当数组中只含有一个为true时,返回该ture所在位置的index,否则返回-1
*/
public static int endIndex(boolean[] arr) {
int index = -1;
int count = 0;
for(int i = 0;i< arr.length;i++) {
if (arr[i]) {
if (++count > 1) {
return -1;
}
index = i;
}
}
return index;
}
}
if(arr[index] = true) {
也错了是“==”号,亲
下面是我改写的
package zhangming.csdn.javase;
public class Count3Quit {
public static void main(String args[]) {
boolean[] arr = new boolean[500];
int index = 0; //索引
int countNum = 0; //计数器,数到3归0
while(index < arr.length) {
if(arr[index] == false) {
countNum ++;
if(countNum == 3) {
countNum = 0;
arr[index] = true;
}
}
index ++;
}
for(int i=0; i<arr.length; i++) {
if(arr[i] == false) {
System.out.println("最后留下来的是第" + (i+1) + "个");
}
}
}
}
if(index == arr.length) {
index = 0;
}
改为 if(index == arr.length) {
break;
}
if(countNum == 3) {
countNum = 0;
arr[index] = false;
leftCount --;
}
应该是if(countNum==2)从0开始数到2是第三个数字