1. 程式人生 > >【約瑟夫環】Java實現:100個人開始從1開始報數,每當報數到3,報數3的人離開,求最後留下來人的位置。

【約瑟夫環】Java實現:100個人開始從1開始報數,每當報數到3,報數3的人離開,求最後留下來人的位置。

問題背景:約瑟夫環問題 
在這裡寫一個簡單的約瑟夫環的問題:100個人坐成一圈開始從1開始報數,每個報數為3的人離開座位,直到座位上只剩下一個人,求這個人的位置。

解決問題使用的工具&程式語言: 
工具:Eclipse 
程式設計:Java

程式碼如下:

public class Yuesefu {
        public static void main(String[] args){
            int number=100;         //假設一共有100個人,同時也是陣列容量
            int index=0;            //定義陣列下標
            int
say=0; //報數 boolean array[]=new boolean[number];//定義一個boolean型別的陣列,將所有人裝進去,陣列元素預設為ture。 for(int i=0;i<array.length;i++){ //當該座位的人報數為3時,將該陣列元素從ture改成false。從而實現人數減1 array[i]=true; } while(number>1){ //當只剩一個人的時候,跳出迴圈
if(array[index]){ //座位有人時報數 say++; //報數 } if(say==3){ //當報數為三時,重新開始計數,該座位的人離開,陣列位置值變為false,人數減一 say=0; array[index]=false; number--; } index
++; //陣列下標加一,往後移動,繼續報數 if(index==100){ //當陣列下標等於100的時候,重新開始一圈,陣列下標變為0 index=0; } } for(int i=0;i<array.length;i++){ //進行多次迴圈後,找出最後陣列中值仍然為ture的元素 if(array[i]){ System.out.println("剩下的是從剛開始報數之後的第"+i+"個人"); } } } }