需求:使用Java程序求解約瑟夫環的問題
約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號爲k的人開始報數,數到m的那個人出列被殺死;他的下一個人又從1開始報數,數到m的那個人又出列被殺死;依此規律重複下去,直到圓桌周圍的人全部出列被殺死,只剩最後一個人爲止,此時遊戲結束,此人爲贏家,也稱該數字爲幸運數字。
import java.util.ArrayList;
public class Test7 {
/*
* 約瑟夫環(幸運數字)
*/
public static void main(String[] args) {
System.out.println(getLucklyNum(8)); //參數代表參與遊戲人的個數
}
/*
* 獲取幸運數字
* 1.返回值類型int
* 2.參數列表int num
*/
public static int getLucklyNum(int num){
ArrayList<Integer> list = new ArrayList<>(); //創建集合存儲i到num的對象
for (int i = 1; i <= num; i++) {
list.add(i); //將i到num存儲在集合中
}
int count = 1; //用來數數的,只要是3的倍數就殺人
for(int i=0; list.size()!=1; i++){ //只要集合中人數超過1,就要不斷地殺人
if(i == list.size()){ //如果i增長到集合最大的索引+1時
i = 0; //重新歸0
}
if(count % 3 ==0){ //如果是3的倍數
list.remove(i--); //就殺人
}
count++;
}
return list.get(0);
}
}