关于约瑟夫环问题,用java 编写程序,输出n个人出圈的顺序,书上的程序代码如下,但是有几点我搞不明白

2024-12-12 19:47:29
推荐回答(1个)
回答1:

你这个好麻烦啊, 理解 队列 和 桟 的区别

队伍    先进先出  FIFO  

桟       先进后出  LIFO

本程序明显是队伍!!!

import java.util.* ;
 public class T {
 public static void main(String[] args) {
  List list = new LinkedList();  
   //模拟15个人,编号是1-15  
   for(int i=1 ; i<=15 ; i++) {
     list.add(i);
   }  
   //模拟 叫到7的人出圈  
   show(list , 7);
 } 
 public static void show(List list  , int n){
   int i = 1 ;//每次报的数字 
   int count = 1 ;//记录第几次出圈 
   while(true){
    //当list长度为1的时候代表就剩下1个人 
    if(list.size()==1){
       System.out.println("第"+count+++"次是"+list.get(0));
      return ;
   }
   //每次获取队里第一个人 
   int value = list.get(0);
    //报完数后移开该人 
   list.remove(0);
   //如果报数的人报的数字为n ,则打印 
   if(i == n) {
    i = 1 ;
    System.out.println("第"+count+++"次是"+value);
   }else {
    //如果报数的人报的数字不是n ,将该人排到队伍的后面,以便下次继续叫号 
    list.add(value);
    //产生下次报数的数字 
    i++ ;
   }
  }
 }
}