约瑟夫环问题的变形, 主要是一个模拟的过程,考察点在于每次退出的人的序号是变化的。所以这一个问题较为简单。在面试或笔试过程中,属于一道签到题目,必须要求自己能够快速写出来。
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;
}