约瑟夫环问题.
- package pack;
- import java.util.*;
- public class demo_2 {
- static int a[];
- public static void main(String[] args) {
- Scanner in=new Scanner(System.in);
- System.out.print("现在有 M 个小朋友, 请输入 M 的值:");
- int m=in.nextInt();
- int a[]=new int[m+1];
- for(int i=1;i<=m;i++) a[i]=i;
- System.out.print("从第 k 个同学开始查数, 请输入 k 的值:");
- int k=in.nextInt();
- System.out.print("数到 n 的同学退出, 请输入 n 的值:");
- int n=in.nextInt();
- int REST=m;// 圈中剩余的人数
- int pose=k;// 标记, 表示正在报数的人
- int total=0;// 查数查了几个, 如果数到 n 则, 从头开始来来
- while(REST>1) {// 圈中还有大于一个人.
- if(a[pose]>0) {// 如果该位置人退出, 不计数
- total++;
- }
- if(total==n) {
- a[pose]=0;// 数到 n 时, 那么将其改为 0, 表示其退出
- total=0;
- REST--;
- }
- pose++;
- if(pose==m+1) pose=1;
- }
- for(int x:a) {
- if(x>0)
- System.out.println(x);
- }
- }
- }
来源: http://www.bubuko.com/infodetail-3028357.html