2-28 约瑟夫环Josephus问题
题目:
古代某法官要判决n个犯人死刑,他有一条荒唐的逻辑,将犯人首尾的相接排成圆圈,然后从第s个人开始数起,每数到第m个犯人,就拉出来处决;然后又数m个,数到的犯人又拉出来处决,依次类推。剩下的最后一人可以豁免。
注意看清楚我的下标,而且书上的图其实是错的!!!
import java.util.Scanner;
//约瑟夫环
public class test5 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();int s = scan.nextInt();//开始位置int d = scan.nextInt();//每个多少人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;//如果到最后一个人了,就直接breakif(cnt != d && st[i] == 0){//这个人没有被删掉且cnt不是dcnt ++;}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);}}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
