【約瑟夫環】Java實現:100個人開始從1開始報數,每當報數到3,報數3的人離開,求最後留下來人的位置。
阿新 • • 發佈:2019-02-11
問題背景:約瑟夫環問題
在這裡寫一個簡單的約瑟夫環的問題: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+"個人");
}
}
}
}