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