任务名称
选队长游戏
任务目标:
通过编写程序,选出队长是谁
任务概述:
今天同学们相约一起爬山游玩,为了更好的进行这场活动,大家准备推举 一个人作为出游的临时队长。为了体现合理公平,大家提出了一个比较有趣的 规则。所有人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数), 凡报到 3 的人退出圈子,剩下的人继续报数,最后留下的当选为队长。 请你通过编写程序,求出一组人中的队长是原来第几位同学。
代码实现
import java.util.Scanner;
//选队长游戏训练任务 XZK-JavaEE 技术方向-10101006
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入参与这个游戏的人数n:");
int n=sc.nextInt();
//建立一个数组进行存储人员
int nums[]=new int [n];
//定义length来表示数组的长度
int length=nums.length;
//定义一个count来报数
int count=0;
//定义一个index用来计数
int index=0;
//用for循环给每个人赋值1 表示称号:队里还有人
for(int i=0;i<nums.length;i++) {
nums[i]=1;
}
//用while进行循环报数 只要数组的长度大于1 证明队里还有人 开始继续报数
while(length>1) {
if(nums[index]==1) {
count++;//只要称号为1,count就会+1;
}
if(count==3) {//代表报数3的人
count=0; //如果为3的话 重新定义
nums[index]=0;//叫到3的这位朋友也就会重新赋值变成0
length--;//称号赋值为0的朋友就会被移除游戏,length-1
}
index++;
if(index==n) {
//当index==n,说明这轮所有朋友已经报数完了,index就会赋值为0,重新开始新一轮的报数
index=0;
}
}
//最后用一个for循环找到称号没有变为0的朋友,那么他就是队长了
for(int i=0;i<nums.length;i++) {
if(nums[i]==1) {
System.out.println("队长是原来的第"+(i+1)+"位同学");
}
}
}
}