约瑟夫环的java实现

约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

直接给出代码,欢迎拍砖。

 1 package com.timeng;
 2 
 3 import java.util.ArrayList;  
 4 import java.util.List;  
 5 import java.util.Scanner;  
 6   
 7 public class Yue {  
 8     public static void main(String[] args) {  
 9         Scanner scanner = new Scanner(System.in);  
10         System.out.print("请输入总人数:");  
11         int totalNum = scanner.nextInt();  
12         System.out.print("请输入报数的大小:");  
13         int cycleNum = scanner.nextInt();  
14         yuesefu(totalNum, cycleNum);  
15     }  
16   
17    public static void yuesefu(int totalNum, int countNum) {  
18         // 初始化人数  
19         List<Integer> start = new ArrayList<Integer>();  
20         for (int i = 1; i <= totalNum; i++) {  
21             start.add(i);  
22         }  
23         //从第K个开始计数  
24         int k = 0;  
25         while (start.size() >0) {  
26             k = k + countNum;  
27             //第m人的索引位置  
28             k = k % (start.size()) - 1;  
29            // 判断是否到队尾  
30             if (k < 0) {  
31                 System.out.println(start.get(start.size()-1));  
32                 start.remove(start.size() - 1);  
33                 k = 0;  
34             } else {  
35                 System.out.println(start.get(k));  
36                 start.remove(k);  
37             }  
38         }  
39     }  
40 }  

 

posted @ 2013-09-23 16:58 engagedin 阅读(...) 评论(...) 编辑 收藏