約瑟夫環問題的變形, 主要是一個模擬的過程,考察點在於每次退出的人的序號是變化的。所以這一個問題較爲簡單。在面試或筆試過程中,屬於一道簽到題目,必須要求自己能夠快速寫出來。
import java.util.Scanner;
/**
* Created by ql on 2019/6/24.
*/
public class Algorithm {
static boolean isRemove[];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
isRemove=new boolean[n];
int result= XingCun(n,m);
System.out.println(result);
}
public static int XingCun(int n,int m){
int p=1;
for (int i=1,r=n;i<=n;i++,r--) {
int k=1;
for (int j=1;j<=i;j++){
k=(k*m)%r;
}
if (k==0){
//若k剛好爲0,說明需要刪除最後一個元素
k=r;
}
while (true){
if (!isRemove[p]){
k--;
if (k==0){
isRemove[p]=true;
break;
}
}
p++;
if (p>n){
p=1;
}
}
}
return p;
}