用Java数组实现选队长的游戏

  任务概述: 今天同学们相约一起爬山游玩,为了更好的进行这场活动,大家准备推举 一个人作为出游的临时队长。为了体现合理公平,大家提出了一个比较有趣的 规则。所有人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数), 凡报到 3 的人退出圈子,剩下的人继续报数,最后留下的当选为队长。 请你通过编写程序,求出一组人中的队长是原来第几位同学。

在这个游戏里,主要就是如何使用数组表示一个圈,又如何去报数,报到3的又该怎么退出圈子等等逻辑的问题。

直接上代码:

package com.hyh.task_004;//包名

import java.util.Scanner;//调用Scanner

/** 选队长游戏训练任务
 *今天同学们相约一起爬山游玩,为了更好的进行这场活动,大家准备推举
 * 一个人作为出游的临时队长。为了体现合理公平,大家提出了一个比较有趣的
 * 规则。所有人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),
 * 凡报到 3 的人退出圈子,剩下的人继续报数,最后留下的当选为队长。
 * 请你通过编写程序,求出一组人中的队长是原来第几位同学。
 *
 */
public class Task_010104_001 {          // 定义了一个类

    public static void main(String[] args) {                //main方法是整个程序的入口处
        Scanner input = new Scanner(System.in);             //使用Scanner获取控制台的输入,并定义一个input来接收
        System.out.print("请输入爬山的人数:");              //提示输入
        if (input.hasNextInt()) {                           //确保输入的是整型数据,不至于输入其它数据类型会报错
            int num = input.nextInt();                      //输入爬山的人数,通过nextInt()方法让输入的数据类型为整型
            int[] studentArray = new int[num];              //定义一个studentArray整型数组,并且数组长度由输入的num决定
            int count = 0;                                  //用来数1、2、3的
            int left = studentArray.length;                 //定义一个left用来记录出圈后的人数
            System.out.print("给人数编号:");
            for (int i = 0; i < studentArray.length; i++) {     //给人数排号
                studentArray[i] = i + 1;                        //从 1 开始排号
                System.out.print(studentArray[i] + " ");        //输出排号后的人数
            }
            System.out.print("\n出圈的人的顺序为:");
            while (left > 1) {                                  //只要圈里的人大于1,就一直进行报数,直到选出(队长)为止
                for (int i = 0; i < studentArray.length; i++) { //对一圈人开始报数,这里默认从数组的第一个开始报数
                if (studentArray[i] != 0) {                     //如果有人出圈了,就不进行报数,这里用数字0来标记表示出圈
                        count++;                                //只要没有被标记的,就继续进行报数
                    }
                    if (count == 3) {                           //如果报数报到3
                        System.out.print(studentArray[i] + " ");//就输出该位置的排号
                        studentArray[i] = 0;                    //并标记为0,代表出圈
                        left--;                                 //圈里的人减一
                        count = 0;                              //报号从头开始
                    }
                }
            }
            for (int i = 0; i < studentArray.length; i++) {     //对数组进行迭代
                if (studentArray[i] != 0) {                     //如果数组的标记不为0,那么他就是队长
                    System.out.println("\n队长的排号为:"+studentArray[i]+" 位置为:" + i); //输出队长的位置,也就是数组的下标
                }
            }
        }else{//如果输入人数的数据类型不是整型,则输出相应提示,就不会出现报错哈
            System.out.println("你输入的不是整型数据,请输入正确的整型数据!");
        }
    }
}

运行截图:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值