500个人围成一圈 , 从第一个人开始数 1,2,3 数到3的人退出,继续往下,后面的人继续数1,2,3 数到3的人就退出 , 于是这样,最后剩下一个人 这个人是几号呢?
老师讲了不同算法。
算法之一:
根据老师的敲的,自己没有形成独立的思路。。。。。
public class OnlyOneTest {
public static void main(String args[]){
boolean[] array = new boolean[500];
for(int i=0; i<array.length; i++){
array[i] = true;
}
int leftCount = array.length ; //剩下的总数
int countNum = 0; //每三个为一轮
int current = 0; //当前指向数组的哪一个
while(leftCount > 1){
if(array[current] == true){
countNum++;
if(countNum == 3){
array[current] = false;
countNum = 0;
leftCount --;
}
}
current++;
if(current == array.length){
current = 0;
}
}
for(int i = 0; i < array.length ; i++){
if( array[i] == true){
System.out.println(i);
}
}
}
}
这样运行出来结果是435 但是我用小数字 1--10 实验了下 最后应该是4剩下来但是用此程序运行则是3剩下来 所以在最后 SYSO的地方自己改成了 i+1... 因为正确答案应该是436吧。。。。。
----------------------------------------------分割线------------------------------------------------------------------------------------------------------------------------------------------------------
额 老师说了,运行出来下标是435 也就是说是第346个数,,,,,,,,嗯 自己浅陋了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。