import java.util.Scanner;
//约瑟夫环
public class josephus {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();//一共多少人
int s = scan.nextInt();//开始位置
int d = scan.nextInt();//每个循环多少人
jose(n,s,d);
}
public static void jose(int n,int s,int d){
int [] q = new int[n];
int [] st = new int[n];//st数组表示这个人有没有被删掉,出局
for(int i = 0; i < n; i ++ ){
q[i] = i;//人的编号从0开始
}
int cnt = 1;//记录d的循环
int x = 0;//用于判断是否最后一个人
for (int i = s; i < n; i = (i + 1) % n){
if(x == n - 1) break;//如果到最后一个人了,就直接break
if(cnt != d && st[i] == 0){//这个人没有被删掉且cnt不是d
cnt ++;
}
else if(cnt == d && st[i] == 0){//如果cnt==d并且当前这个人没有被删掉
st[i] = 1;//那么让他的状态变成1,表示出局了
System.out.println(i);//输出出局的人
cnt = 1;//让cnt重置
x ++;//出局人数加1
}
}
System.out.print("剩下的是");
for(int i = 0; i < n; i ++){
if(st[i] != 1){
System.out.print(i);
}
}
}
}
josephus约瑟夫环问题
最新推荐文章于 2024-08-11 21:58:53 发布