题解 | 约瑟夫环
约瑟夫环
https://www.nowcoder.com/practice/e417cfe32c74416ca38247f619ddb322
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextInt(), k=in.nextInt(), m=in.nextInt();
boolean []a=new boolean[n];//初始全为假,出局为真
int num=0;//出局人数
int x=0;//报数
while(num<n-1){//当num等于n-2时有n-1个人出局
if(!a[k]){
x++;
if(x==m){//只有x变化后才进行判定可以减少运算时间
a[k]=true;
num++;
x=0;
}
}
k=(k+1)%n;//每次报数报数的位置向后增加,对总人数取余则确保不会导致数组越界。
}
for(int i=0;i<n;i++)
if(!a[i]){
System.out.print(i);
break;//退出循环减少运算时间
}
}
}