n个人循环报数1-3问题

来源:互联网 发布:网络尖兵官网 编辑:程序博客网 时间:2024/05/16 17:55

问题描述: 标号1-n的n个人首尾相接,报数1-3,报到3者退出,问剩下最后一人标号。

public int lastPerson(int n) {        if(n <= 1)        return n;        int lastPerson = 0;            boolean[] personList = new boolean[n];        for(int i = 0; i < n; i++){        personList[i] = true;        }        int nTmp = n;  //当前剩余人数        int start = 0; //当前开始报数位置        int cnt = 0;   //计数器                // 进行报数,直到仅剩下1人        while(true){        if(personList[start] == true){        cnt++;        }        if(cnt == 3){        personList[start] = false;        cnt = 0;        nTmp--;        }                if(nTmp == 1){        break;        }        start++;        if(start == n){        start = 0;        }        }        //找出这一人        for(int i = 0; i < n; i++){        if(personList[i] == true){        lastPerson = i + 1;        }        }        return lastPerson;    }


0 0