- package com.mxh.test;
- public class Test01 {
- /*
- * 需求:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),
- * 凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
- *
- * 思路:由题意可知解决本题的关键是循环,最后只剩一个人,因此条件是:只要不是一个人就循环。
- * 用数组表示参加游戏的人,并为人编号,对数组进行初始化为123...。对数到3的人退出游戏,对他进行重新赋值为0。
- * 遍历数组,输出不是0的数组元素。
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- try{
- new Youxi(9).begin();//参数为参加游戏的人数。
- }
- catch(Exception e){
- throw new RuntimeException("参加游戏的人数不能为小于0.");
- }
- }
- }
- class Youxi {
- //构造函数对数组进行初始化。123...
- Youxi(int m) {
- arr = new int[m];
- for (int x = 0; x < m; x++) {
- arr[x] = x + 1;
- }
- y = arr.length;
- }
- int[] arr;
- int x = 0;// 数组角标
- int y;// 剩余游戏人数
- int zhizhen = 1;//指针
- public void begin() {
- while (y != 1) {
- if (arr[x] != 0) {
- if (zhizhen % 3 == 0) {//对数到3的人赋值为0,同时人数减1
- arr[x] = 0;
- y--;
- }
- zhizhen++;//不管数没数到3都进行下一个人。
- }
- x++;
- if (x == arr.length) {//到数组末尾时,重新遍历。
- x = 0;
- }
- }
- for (int x = 0; x < arr.length; x++) {
- if (arr[x] != 0)
- System.out.println("最后留下的是原来第" + arr[x] + "号的那位。");
- }
- }
- }
复制代码 不知道如何隐藏呀!
|