約瑟夫環算法Java實現代碼

m8x2 9年前發布 | 5K 次閱讀 Java

約瑟夫環是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重復下去,直到圓桌周圍的人全部出列。


2B求解:

    private void myJosf(int teamLength, int baoshu) {
int[] team = new int[teamLength];

    for (int n = 1; n < teamLength + 1; n++) {  
        team[n - 1] = n;  
    }  

    int index = 0;  

    for (int n = 0; n < teamLength; n++) {  
        for (int k = 0; k < baoshu;) {  
            if (index > teamLength - 1) {  
                index = 0;  
            }  

            if (team[index] > 0) {  
                if ((k + 1) % baoshu == 0) {  
                    System.out.println(index + 1);  
                    team[index] = 0;  
                }  
                k++;  
            }  
            index++;  
        }  
    }  

}  </pre> 


文藝求解:

    public void josephCircle(int n, int k) {
int flag = 0;
boolean[] kick = new boolean[n];
// set kick flag to False;
for (int i = 0; i < n - 1; i++) {
kick[flag] = false;
}

        int counter = 0;  
        int accumulate = 0;  
        while (true) {  
            if (!kick[flag]) {  
                accumulate++;  
                if (counter == n - 1) {  
                    System.out.println("kick last person====" + (flag + 1));  
                    break;  
                }  
                if (accumulate == k) {  
                    kick[flag] = true;  
                    System.out.println("kick person====" + (flag + 1));  
                    accumulate = 0;  
                    counter++;  
                }  
            }  
            flag = (flag + 1) % n;  
        }  

    }  </pre> 


 本文由用戶 m8x2 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!