Java_案例实例2.约瑟夫环问题
生活随笔
收集整理的這篇文章主要介紹了
Java_案例实例2.约瑟夫环问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
約瑟夫環(huán)問題描述:
編號為1-N的N個人按順時針方向圍坐成一圈,從第S個人開始報數(shù)(從1報起),報數(shù)為M的人出圈,再從他的順時針方向的下一個人重新開始報數(shù),如此下去,直至所有人出圈為止,給出N個人的出去順序
算法:
1、設置一個boolean數(shù)組out,元素out[i]標記編號為i的人是否已經(jīng)出圈
2、從編號為S 的人開始,若為報數(shù)至M,則繼續(xù)尋找下一出圈標記為false的 人
3、輸出報數(shù)為M的人的編號,并修改其對應的出圈標記為true
4、若輸出人數(shù)未達到M,則繼續(xù)尋找下一出圈標記為false的人并重新報數(shù),否則結束
源代碼:
package ch4_2;public class JosephRing {public static void main(String[] args) {// 總人數(shù)final int N = 13;// 從第S個人開始報數(shù)final int S = 3;// 報數(shù)為M的人出圈final int M = 5;// 統(tǒng)一下標與人的標號(自然計數(shù))boolean[] out = new boolean[N + 1];// 初始化數(shù)組for (int i = 1; i <= N; i++) {// 報數(shù)前所有人都未出圈out[i] = false;}// 存放下次開始報數(shù)的人的編號int i = S;// 已出圈的人int n = 0;// 報數(shù)為count的人int count;System.out.println("出圈順序:");// 仍有人在圈內(nèi)while (n < N) {// 出圈后重新計數(shù)count = 0;// 未報數(shù)至Mwhile (count < M) {// 報數(shù)的人未出圈if (out[i] == false) {// 報數(shù)count++;}// 未報數(shù)至M(上面的if語句可能修改了count)if (count < M) {// 求下一個的編號(到達N+1則回到第1個人)i = (i + 1 > N ? 1 : i + 1);}}// 內(nèi)層while結束,編號為i的人出圈System.out.println(i + " ");// 標記出圈的人out[i] = true;// 又有一人出圈n++;}}}總結
以上是生活随笔為你收集整理的Java_案例实例2.约瑟夫环问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java_案例实例1.简单的人机交互
- 下一篇: Java实例_综合实践3.K-Means