数3退1

我在网上找了些JAVA的视频,学习了一下。老师讲了一道题,有500个小孩拉成一个圈,开始123123这样报数,数到3的小孩退出圈外,问:剩下最后一个小孩的位置是多少。

我跟着老师的思路缕了一下,然后自己盲打了一下代码,感觉很复杂,所以把代码copy下来,留给日后复习用。(结果:435)

//数3退1
public class Count3Quit1 {

    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 countNum = 0;            //计数器(数3退1)初始化
        int index = 0;                //下标值初始化
        while(leftCount > 1){
            if(arr[index] == true){
                countNum ++;
                if(countNum == 3){    //计数器数到3
                    arr[index] = false;//从true变为false意为让小孩退出
                    countNum = 0;    //计数器归0
                    leftCount --;    //剩余小孩数-1
                }
            }
            index ++;                //下标值
            if(index == arr.length){//(0-499)当下标为第500时,一圈循环完毕,开始再一次循环,初始化下标
                index = 0;
            }
            
        }
        for(int i = 0; i < arr.length; i++){
            if(arr[i] == true){
                System.out.println(i);//打印最后剩下小孩的位置
            }
        }
    }
    

}

 

posted @ 2015-12-08 20:44  响声  阅读(427)  评论(0编辑  收藏  举报