游戏背景

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

游戏规则

学园共有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赋值0count = 0;// 报数器归0remain--;// 值为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];

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

  1. 围成一圈的排列组合问题_分班必考知识点!小学奥数之排列组合问题

    点击上方蓝字关注我们 查看更多知识点哦~ SH  研习社 往期精彩回顾 分班必考知识点!小学奥数之流水行船问题 分班必考知识点!小学奥数之牛吃草问题 分班必考知识点!小学奥数之巧算分数 分班必考知识点 ...

  2. 围成一圈的排列组合问题_行测技巧:巧解环形排列组合

    各位同学,排列组合是行测考试中的一个高频考点,也是我们学习的难点.排列组合中有一种特殊的模型---环形排列组合,那么今天小编就带大家一起来探讨一下:如何求解环形排列组合问题. 首先我们需要明确,什么是 ...

  3. 围成一圈的排列组合问题_约瑟夫问题

    约瑟夫问题由来 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了 ...

  4. (python)约瑟夫(Josephus)个人围成一圈,并按顺时针依次编号1-n。从编号为1的人开始,按顺时针方向每隔一 人选出一个,剩下的人重新围成一圈,如此循环直到剩下两人,这剩下的两人就是幸运儿

    约瑟夫(Josephus)环问题 题目:n个人围成一圈,并按顺时针依次编号1-n.从编号为1的人开始,按顺时针方向每隔一 人选出一个,剩下的人重新围成一圈,如此循环直到剩下两人,这剩下的两人就是幸运儿 ...

  5. 题目: 有 n个人围成一圈,顺序排号。从第一个人开始报数(从 1到 3报数),凡报到 3的 人退出圈子,问最后留下的是原来第几号的那位。(模拟)

    题目: 有 n个人围成一圈,顺序排号.从第一个人开始报数(从 1到 3报数),凡报到 3的 人退出圈子,问最后留下的是原来第几号的那位. 思路: 题目说是排成一圈,可以看成一个数组的排列.用i从下标为 ...

  6. ACMNO.38 C语言-报数 有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

    题目描述 有n人围成一圈,顺序排号. 从第1个人开始报数(从1到3报数),凡报到3的人退出圈子.`在这里插入代码片` 问最后留下的是原来的第几号的那位. 输入 初始人数n 输出 最后一人的初始编号 样 ...

  7. 10个人围成一圈循环报数,输出最后出圈的人

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p138 习题5 9.假设有10个人围成一圈,从开始顺序编号.从第一个人开始报数,从1到3,凡是报出3的 ...

  8. C语言经典例69-有n个人围成一圈报数问题

    目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位. 2 分析 假设全部人 ...

  9. 有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数

    [问题描述]有n个人围成一圈,按顺序从1到n编号.从第一个人开始报数,报数3的人退出圈子,下一个人从1开始重新报数,报数3的人退出圈子.如此循环,直到留下最后一个人.问留下来的人的编号. [输入形式] ...

最新文章

  1. mongodb插入数据获取本次插入的mongodb id
  2. ICML2020 | PGFS:如何保证生成分子是可合成的?强化学习来帮忙
  3. 福利丨一门面向所有人的人工智能公开课:MIT 6.S191,深度学习入门
  4. shell 从1加到100
  5. 【转载】分布式系统的理解
  6. 五位专家跟你讲讲为啥Python更适合做AI/机器学习
  7. Jmeter中JDBC Connection Configuration实现MySQL JDBC Request数据库处理
  8. maven伺服搭建_nexus搭建maven私服
  9. 深度强化学习中实验环境-开源平台框架汇总
  10. 黑马程序员传智播客 python 迭代器学习笔记
  11. Postgresql创建数据库及用户然后执行初始化脚本
  12. Ubuntu常用软件推荐,图文详细说明及下载
  13. Aruba7010 默认密码_紧急提醒:手机上的这个密码必须设,否则钱包很危险!|手机|sim|盗取...
  14. 工厂食堂3D指纹考勤系统解决方案
  15. OFN鼠标驱动(三) -- I2C驱动的移植(2)
  16. pbr发光 unity_Unity PBR—BRDF
  17. 使用TabLayout+ViewPager+Fragment实现切页展示
  18. 习题4-5 换硬币 (20 分)
  19. 你是在独立思考,还是在被洗脑?
  20. android技术分享方向,android开发分享在Android中计算指南针方位/标题到位置

热门文章

  1. 4K屏配置keil分辨率和图标大小
  2. 虚拟机是什么意思?有关虚拟机的知识介绍
  3. LL(1)预测分析程序
  4. 关于android6.0网络连接感叹号的问题
  5. 虚幻4引擎源码学习笔记(一):整体文件结构
  6. Bootstrap(ui框架)
  7. Triggers — 触发响应
  8. 1000w+条中国大陆企业工商注册信息数据集
  9. “创新实践”项目介绍2:《3D点云中的汽车检测》
  10. 基于注意力机制的超分辨率重建汇总