約瑟夫環(huán):已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數(shù),數(shù)到m的那個人出列;他的下一個人又從1開始報數(shù),數(shù)到m的那個人又出列;依此規(guī)律重復(fù)下去,直到圓桌周圍的人全部出列。 直接給出代碼,歡迎拍磚。 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('請輸入總?cè)藬?shù):');
11 int totalNum = scanner.nextInt();
12 System.out.print('請輸入報數(shù)的大?。?);
13 int cycleNum = scanner.nextInt();
14 yuesefu(totalNum, cycleNum);
15 }
16
17 public static void yuesefu(int totalNum, int countNum) {
18 // 初始化人數(shù)
19 List<Integer> start = new ArrayList<Integer>();
20 for (int i = 1; i <= totalNum; i ) {
21 start.add(i);
22 }
23 //從第K個開始計數(shù)
24 int k = 0;
25 while (start.size() >0) {
26 k = k countNum;
27 //第m人的索引位置
28 k = k % (start.size()) - 1;
29 // 判斷是否到隊(duì)尾
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 }
|
|