約瑟夫問題的解法
解法一:
一次將消除的元素進行標記,最後判斷元素的個數,如果還剩一個,那麼迴圈結束。
public class YueSefuS {
public static void main(String args[]){
YueSefuS yueSe = new YueSefuS();
System.out.println(yueSe.getYueSe(40, 3));
}
private int getYueSe(int m,int n){
int a[] = new int[m];
//用來標記還有幾個活著的
int count=m;
//用來標記報數的
int j=0;
int i=-1;
while(count!=0){
i=(i+1)%m;
if(a[i]==0){
j++;
}
if(j==n){
//標記為1
a[i]=1;
j=0;
count--;
}
}
return i;
}
}
解法二:
使用遞迴的方法:
public class YueSeFu {
public static void main(String args[]){
YueSeFu yueSe = new YueSeFu();
System.out.println(yueSe.getYueSe(40, 3));
}
//m代表多少人,n代表數到幾
public int getYueSe(int m,int n){
if(m==1){
return 0;
}
else{
return (getYueSe(m-1,n)+n)%m;
}
}
}