您的位置:首页 > 编程语言 > Java开发

【生存游戏】一组按序排列围成一圈的参赛选手,通过逢3退1游戏机制筛选出最后一个生存者的Java算法

2020-08-16 17:43 113 查看

游戏背景

私立希望之峰学园是一座集结了所有领域的超一流高中生的学校。主人公苗木诚,本来只是一名很平凡的日本高中生,却在无意中被选为了“超高校级的幸运”者进入了学园。但是,等待他的却是自称校长的谜之人物“黑白熊”,黑白熊告诉学生们:“一旦进来,就必须一辈子都等在这里才行,只有唯一的幸运者能成功离开这所学园。”

游戏规则

学园共有1000名学生,所有人按顺序围成一圈,从既定的1号开始进行报数。每次报到数字3时,对应的学生将出局从而丧失离开学园的机会,剩下的学生继续从1开始报数,直到剩下最后一个为止。

游戏目标

作为主人公苗木诚的你可以选择开始的序号牌,请问要如何选择,才能在“生存游戏”中存活下来,最终逃离黑白熊的魔掌呢?

逻辑分析

1、 首先要创建一个长度为1000一维数组,并全部赋值1;
2、 创建三个关键变量:count用来报数、remain用来计算剩余人数、索引index用来调用元素值;
3、 在报数过程中遇到值为0的元素,就把元素的值由1更新为0,同时count不变,index增加,继续报数;
4、 当数组中只剩下最后一个人,即remain == 1时,结束循环,打印幸存者的编号。

代码实现

package demo1;

public class CaptainChoice {
/**
* 逢3除外,打印最后留下的编号
*
* @param args
*/
public static void main(String[] args) {
//假设有1000个人
//1、	建立一个初始值全为1的数组
int[] students = new int[1000];//System.out.println(students.length);
// 对数组赋值
for(int i=0;i<students.length;i++) {
students[i] = 1;
}

//2、	创建变量
int count = 1;
int remain = students.length;
int index = 0;

//3、	循环体
while(true) {
// 防止下标越界
if(index>students.length-1) {
index = index - students.length;
}

else {
// 如果值为0,则跳过该对象
if(students[index] == 0) {
count--;// index继续+1,count保持不变
}
// 如果计数为3,则除外该对象
else if(count == 3) {
students[index] = 0;// 数到3赋值0
count = 0;// 报数器归0
remain--;// 值为1的数减1
}
index++;// 下标递增
count++;// 报数
}

//4、	remain == 1的时候,break
if(remain == 1) {
break;
}
}

//5、	遍历数组找出值为"1"的元素并输出结果
for(int i=0;i<students.length;i++) {
if(students[i] == 1) {
System.out.println("恭喜第"+ (i+1) + "位同学生存下来。");
}
}
}
}

运行结果

要注意的细节

由于这里创建数组设置的数组长度是int型,在Java中int型的长度为4个字节,取值范围为 -2312^{31}231 —— 2312^{31}231 - 1,要注意不要越界报错。

int[] students = new int[1000];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: