黑马程序员技术交流社区

标题: n个人围成一圈,报到m的人出列 (这题很意思,有兴趣可以看下) [打印本页]

作者: 林枢    时间: 2011-9-13 23:43
标题: n个人围成一圈,报到m的人出列 (这题很意思,有兴趣可以看下)
  1.   
  2. import java.util.Arrays;   
  3.   
  4.   
  5. /**  
  6. * n个人围成一圈,报到m的人出列  
  7. * @author sunlightcs  
  8. * 2011-3-8  
  9. * http://hi.juziku.com/sunlightcs/  
  10. */  
  11. public class Queue {   
  12.   
  13.     public static void main(String[] args) {   
  14.         queue(10, 3);   
  15.     }   
  16.       
  17.     /**  
  18.      * 最后出队的人  
  19.      * @param total  总的人数  
  20.      * @param num    第几号出队  
  21.      */  
  22.     public static void queue(int total, int num){   
  23.         //定义一个数组,true表示没有出队列的,false表示已经出队列的   
  24.         boolean []arr = new boolean[total];   
  25.         Arrays.fill(arr, true);   
  26.            
  27.         //移动变量,如:1  2  3  1  2  3  1  2   
  28.         int next = 1;   
  29.            
  30.         //数组下标   
  31.         int index = 0;   
  32.            
  33.         //剩下的人数   
  34.         int count = total;   
  35.            
  36.         //如果剩下的人数为1人时,停止报数   
  37.         while(count>1){   
  38.             if(arr[index] == true){   
  39.                 if(next == 3){   
  40.                     arr[index] = false;   
  41.                        
  42.                     //剩下的人数减1   
  43.                     --count;   
  44.                        
  45.                     //移动变量复位,从1开始报数   
  46.                     next = 1;   
  47.                        
  48.                     System.out.println("依次出列的人为:"+(index+1));   
  49.                 }else{   
  50.                     ++next;   
  51.                 }   
  52.             }   
  53.                
  54.             ++index;   
  55.             if(index == total){   
  56.                 //数组下标复位,从0开始新重遍历   
  57.                 index = 0;   
  58.             }   
  59.         }         
  60.         for(int i=0; i<total; i++){   
  61.             if(arr[i] == true){   
  62.                 System.out.println("最后出列的人为:"+(i+1));   
  63.             }   
  64.         }   
  65.     }   
  66.       
  67. }  
复制代码

作者: 匿名    时间: 2011-9-13 23:51
标题: 回复 楼主 的帖子
N年前的老程序了。。。
作者: 匿名    时间: 2011-9-14 06:17
。。。很有趣吗
作者: 匿名    时间: 2011-9-16 09:19
数据结构考题-约瑟夫环-现在已经看不懂了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2