java 实现 选队长的游戏(最后的幸存者)
- 今天同学们相约一起爬山游玩,为了更好的进行这场活动,大家准备推举一个人作为出游的临时队长。为了体现合理公平,大家提出了一个比较有趣的规则。所有人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子,剩下的人继续报数,最后留下的当选为队长。请你通过编写程序,求出一组人中的队长是原来第几位同学。
import java.util.Scananer
package day05;
import java.util.Scanner;
class Demo3{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生的人数:");
if(sc.hasNextInt()){
int student = sc.nextInt(); //用来接收输入的学生人数
//创建一个数组,用来放置所有的学生;数组长度由输入的学生人数确定
int[] stu = new int[student];
//设置一个变量,用来确认报数的记录
int count = 0;
//设置状态,用来控制循环的执行
boolean states = true;
//剩余参加游戏人数
int stuNum = student;
for(int i = 0;i < stu.length;i ++){
//循环遍历,并给数组进行赋值,用来区分学生是否退出游戏:0表示退出,1表示继续游戏
stu[i] = 1; //每个学生的初始状态都为1
}
System.out.println("推出选队长游戏的学生的编号:");
while(states){
//只要学生人数大于1,就继续游戏
if(stuNum > 1){
for(int i = 0;i < stu.length; i ++){
//判断学生状态,只能为1是才能继续参加游戏
if(stu[i] == 1){
//满足条件,报数+1
count++;
if(count == 3){
//报数为3时,退出游戏,学生状态设置为0
stu[i] = 0;
//剩余参加游戏学生 - 1;
stuNum --;
//报数重置为0;
count = 0;
//输出推出学生游戏编号
System.out.print(i+ 1 +"\t");
}
}
}
}else{
//人数等于1 时,结束游戏
states = false;
}
}
System.out.println();
System.out.println("学生参加状态:(1、有资格 0、无资格)");
for(int i = 0;i < stu.length;i ++){
System.out.print(stu[i] + "\t");
}
System.out.println();
for(int i = 0;i < stu.length;i ++){
if(stu[i] == 1){
System.out.println("队长人选" + (i+1));
}
}
}else{
System.out.println("输入错误!");
}
}
}
- 代码运行截图:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8264bb34541c8fcdf5a472177c80ec6e.png)