出圈问题---n个人围成一圈,数到key或者key的倍数,出圈,问剩下的最后一个人原来的位置是多少?

java版

1、n个人围成一圈,说明它是重复循环的,头就是尾。

2、每次数key或者key的倍数,例如3,就是数到3或者3的倍数这个数出圈,然后继续数。

3、当我们数完一圈,接着头部继续数,最好的方法就是取余,就可以忽略掉圈数的问题。

4、保存数据的方式,可以采用数组,可以采用链表。我们这里采用链表,因为数组删除元素不会自动回退和移动的,尽管数组效率要高一些。

5、由于每次删除元素之后,元素的个数会减少一个,元素会向前移动,所以下一个3(key)的倍数只需要走两步就可以,所以我们把下标每次删除元素之后-1.这样可以保证每次删除的元素都是3(key)的倍数。

6、如果使用从0开始的下标计算,那么初始化的时候index应该为-1,这样就相当于模拟了元素已经删除了一个。

package com.company;import java.util.LinkedList;
import java.util.List;/*** 经典算法-出圈 n个人 围成一圈 数到3或者3的倍数就出去,问最后剩下来的人的位置。*/
public class OutCircle {public static Integer out(int total, int key) {List<Integer> list = new LinkedList<>();for (int i = 1; i <=total ; i++) list.add(i);//循环赋值初始位置。从1开始。int index = -1; //下标从0开始 , 初始化为-1;while (list.size() > 1) {index = (index + key) % list.size(); //对总数取余。 index+key,表示每次数key(3)个数list.remove(index--);//把当前元素删除,然后下标-1.}return list.get(0);//返回最后一个元素的最开始的位置。}public static void main(String[] args) {System.out.println("最后剩下的人的位置:"+out(50,3));//打印出来}}

输出结果:

最后剩下的人的位置:11Process finished with exit code 0

出圈问题(java)-----n个人围成一圈,数到key或者key的倍数,出圈,问剩下的最后一个人原来的位置是多少?相关推荐

  1. 面试题:15个人围成圈数数 每逢报数为七的倍数就退出,一直循环下去 ,直到剩下最后一人 ,最后剩余的是第几个人,展示出退出的顺序

    问题: 15个人围成圈数数 每逢报数为七的倍数就退出,一直循环下去 , 直到剩下最后一人 ,最后剩余的是第几个人,展示出退出的顺序. 代码: PS:如果代码有哪里不理解可以看下面的分析,如果能理解,就 ...

  2. 100个人围成一圈c语言,C语言 约瑟夫圈问题:N个人围成一圈,从第一个人开始按顺序报数并编号1,2,3,……N,然后开始从第一个人转圈报数,凡是报到3的退出圈子。则剩下的最后一个人编号是多少。...

    样例输入3  输出2 输入100   输出91 代码及分析: #include int main() { int i,n,N,out,a[1000]; out=i=n=0; //用out记录退出圈子的 ...

  3. 一群人围成一圈报数,3倍数的就退出,面试题

    这个题目指的是一群人,围成一个圈,然后一个接一个的报数,当数到3或者3的倍数时候就退出,知道最后一个人. 距离当人数为30的时候: public class CycleTest {          ...

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

    游戏背景 私立希望之峰学园是一座集结了所有领域的超一流高中生的学校.主人公苗木诚,本来只是一名很平凡的日本高中生,却在无意中被选为了"超高校级的幸运"者进入了学园.但是,等待他的却 ...

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

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

  6. 有n个人围成一圈,从第1个人开始,1、2、3报数,报至3出局,余下的人继续从1、2、3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列。(要求:用循环队列解决该问题。)

    1. 有n个人围成一圈,从第1个人开始,1.2.3报数,报至3出局,余下的人继续从1.2.3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列.(要求:用循环队列解决该问题.) 这是一道 ...

  7. (链表解决)13个人围成一圈,从第一个人开始顺序报号1,2,3,凡报到3的人,退出圈子,找出最后留在圈子里的人的序号。

    题目 13个人围成一圈,从第一个人开始顺序报号1,2,3,凡报到3的人,退出圈子.找出最后留在圈子里的人的序号. 代码 #include <stdio.h> #define n 13 ty ...

  8. Java数组实现:一群人围成一圈从123报数 如果报到3就退出该圈中 直到最后一个人留下来!问其位置

    题目:一群人围成一圈从123报数,如果报到3就退出该圈中,直到最后一个人留下来!问留下这个人的位置是多少? 这是一个典型的约瑟夫环问题,接下来我只用Java的数组去实现,为什么用数组我觉得数组相对来说 ...

  9. C语言用数组1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈;下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序。 考虑问实现约瑟夫环问题

    1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈:下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序. 考虑问题: 报到T的人出圈,怎么表示出 ...

最新文章

  1. LINUX CentOS6.8 wdcp面板安装
  2. 华为鸿蒙系统新机发布时间,华为鸿蒙OS发布会定档,或将有多款新机亮相
  3. 【转】C#正则表达式小结
  4. Java的内存--存储
  5. Git SSH方式克隆远程仓库到本地
  6. 隐马尔可夫HMM(EM算法(期望最大化算法)
  7. 一个基于特征向量的近似网页去重算法
  8. Eclipse查看hadoop源代码出现Source not found,是因为没有添加.zip
  9. poj3253Fence Repair
  10. 通过binlog恢复mysql数据库
  11. 大意导致Java访问DB2库时导出SQLCODE=-301, SQLSTATE=07006错误
  12. 【算法】阿里双十一推荐技术
  13. 2021-01-19 灵动ICPC集训
  14. Python百宝箱密码锁升级版源代码
  15. 2016-2017-2 《Java程序设计》课程学生博客和代码托管链接
  16. 在线下单系统think php,昱杰订单管理系统(ThinkPHP版) v19.0
  17. ConcurrentHashMap源码分析,轻取面试Offer(一)
  18. Java生成sitemap网站地图
  19. Hive创建表的过程详细过程
  20. Android Studio 更换/设置App应用图标Icon

热门文章

  1. 她他它的用法?收藏给小孩看吧
  2. 携程手机端网页设计效果图
  3. 力技艺法道,工匠师圣仙
  4. 耗时两周的P2PQQ终于完成了!!!
  5. PHP手机版源码下载分期系统源码Thinkphp内核开发集成支付,短信功能,征信对接
  6. java乱码base64_JavaScript BASE64算法实现(完美解决中文乱码)
  7. java 编写方法和属性,Java类属性及方法的定义
  8. 昆明机床:10 月正式实施10 转增5 可期
  9. 控制windows开关机代码
  10. 华为云服务器使用之搭建极简服务器