折腾了很久,还是没有发现问题根源,希望大家能帮我找出问题所在。
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 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) + "个");
}
}
}
}
解决方案 »
- 谁有twaver 3.5完整包给我一份
- 线程题目
- 求一个求最大素数的程序
- 在JDK1.5中怎么把图片在面板中插入了???急
- 如何在产生jar的时候去掉不需要的class?
- 请问一下java中的两个关键字是怎么回事,native 和transient,谢谢
- 为什么把javax.json放在J2EE里面?
- 如何实现JButton鼠标移动上去以后变换效果
- !!!200分:请问关于Java Stream的问题!!!
- jb5问题,在new project后,new class后编写一个class,运行时出现Runtime Properties画面,为什么?
- 关于类似于 类.class 和 类.this 作为参数的问题
- 一个小程序
countNum = 0;
arr[index] = false;
leftCount --;
}
应该是if(countNum==2)从0开始数到2是第三个数字
改正方法有两种:
1、将while的判断条件改为index<arr.length (当然了,对if中的index判断就没用了,可以去掉)
2,将 if(index == arr.length) {
index = 0;
}
改为 if(index == arr.length) {
break;
}
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(arr[index] = true)
这里应该是:“==”,其它没有问题。兄弟下面的那个程序不知道你编译运行了没有,你的思路首先就是错误的。
if(arr[index] = true)
这里应该是:“==”,其它没有问题。兄弟下面的那个程序不知道你编译运行了没有,你的思路首先就是错误的。抱歉啊!还以为你要的是将3,6,9,12等都删除呢?
原来是约瑟夫循环啊!
看来我还是太年青啊!!万分抱歉!!!
/**
* 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;
}
}