[java經典算法題]有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位?
題目:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位?
1
package com.weidu.algorithms;
2
3
import java.util.Arrays;
4
import java.util.Scanner;
5
6
/**
7
* @Title:
8
* @Description:
9
* @author Afei
10
* @date: 日期:2012-6-10 時間:下午05:41:04
11
* @Copyright:西北師范大學緯度工作室 Copyright (c) 2012
12
* @version:1.0
13
*/
14
public class Qu3 {
15
16
/**
17
* 功能說明:1、 有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,<br>
18
* 問最后留下的是原來第幾號的那位。
19
*
20
* @Afei 2012-6-10
21
* @param args
22
*/
23
24
public static void main(String[] args) {
25
// TODO Auto-generated method stub
26
Scanner input = new Scanner(System.in);
27
System.out.print("請輸入總人數:");
28
int p = input.nextInt();
29
/**** 初始化人員 ***/
30
boolean[] per = new boolean[p];// boolean數組表示站成一圈的人,false表示退出
31
for (int i = 0; i < per.length; i++) {
32
per[i] = true;
33
}
34
35
/**** 報號 ***/
36
int t = 0, len = per.length;
37
while (len > 1) {
38
for (int i = 0; i < per.length; i++) {
39
40
if (per[i]) {
41
t++;
42
if (t == 3) {
43
t = 0;
44
per[i] = false;
45
len--;
46
}
47
}
48
}
49
}
50
/***** 結果 *****/
51
System.out.println("最后的情況:" + Arrays.toString(per));
52
for (int i = 0; i < per.length; i++) {
53
if (per[i]) {
54
System.out.println("原來喊的數:" + (i + 1) % 3);
55
}
56
}
57
}
58
}
59

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

posted on 2012-06-12 00:08 feezh 閱讀(30772) 評論(7) 編輯 收藏 所屬分類: Java相關