【生存游戏】一组按序排列围成一圈的参赛选手,通过逢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];
相关文章推荐
- (个人笔记系列) Java基础语法
- servlet调试报错:java.lang.IllegalStateException: Error starting child
- Java 字符串的格式化(详解 + ) 欢迎点赞 + 收藏
- Spring的AOP,IOC,DI
- A Java Runtime Environment(JRE) or Java Development Kit(JDK) must be available……
- Java并发编程(07):Fork/Join框架机制详解
- 安装Java软件
- RabbitMQ与springboot进行整合
- JavaBasic笔记
- 关于myeclipse2017 恢复页面布局
- Spring中的@Import注解作用
- SpringBoot集成FastDFS依赖实现文件上传
- Java:面向对象全面总结
- JDK 11 编译时报var新语法找不到
- JDK如何安装
- JDBC---java语言连接数据库1
- Spring Boot系列之读取配置
- 遗传算法框架-基于java jenetics库实现
- JavaSE:Java语言概述
- springboot + maven 打包问题以及打包部署后运行报错问题