[java经典算法题]有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?

[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


你可能感兴趣的:([java经典算法题]有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?)