约瑟夫问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的人的序号为5,4,6,2,3。最后剩下1号。借用一些自己感兴趣的球星的名字,使用Java语言简单实现了该问题。

package com.ohana.josephu;import java.util.ArrayList;
import java.util.List;/*** 约瑟夫问题的java解决方案之一* * @author Ohana* @date 2013-09-07*/
public class JosephuProblem {private List<String> list = new ArrayList<String>();// 存储输出结果private List<String> resultRlist = new ArrayList<String>();public List<String> getList() {return list;}public List<String> getResultRlist() {return resultRlist;}public static JosephuProblem getInstance() {JosephuProblem jp = new JosephuProblem();// 初始化集合中的数据jp.init();return jp;}/*** 初始化数据*/private void init() {this.list.add("卡卡");this.list.add("哈马西克");this.list.add("莫德里奇");this.list.add("皮尔洛");this.list.add("蒂亚戈.席尔瓦");this.list.add("巴神");this.list.add("伊布");this.list.add("卡瓦尼");this.list.add("费莱尼");this.list.add("小法老");this.list.add("厄齐尔");}/**** 约瑟夫问题的计算* @param startPoint*            开始位置* @param distance*            间距*/private void reduce(int startPoint, int distance) {// 开始位置不能小于下阕(0)或者大于上阕(list.size()-1)if (startPoint < 0 || startPoint > list.size() - 1) {System.out.println("开始位置不存在");return;}// distance不能为负数if (distance < 0) {System.out.println("间距不能小于0");return;}// 集合不能没有数据if (list.size() < 1) {System.out.println("list中尚未初始化数据");return;}// 每次计数开始的索引int startIndex = startPoint;// 删除的位置int removeIndex;while (list.size() > 0) {// 【起始位置】+【间距】-1 =【len】int len = startIndex + distance - 1;// 如果 len > list.size();if (len > list.size() - 1) {removeIndex = len % list.size();} else {removeIndex = len;}String rmElement = list.remove(removeIndex);resultRlist.add(rmElement);startIndex = removeIndex;}}public static void main(String[] args) {JosephuProblem jp = JosephuProblem.getInstance();System.out.println("处理前的顺序");for (int i = 0; i < jp.getList().size(); i++) {String item = jp.getList().get(i);System.out.print(item + " , ");}System.out.println();jp.reduce(2, 3);System.out.println("处理后的顺序");for (int i = 0; i < jp.getResultRlist().size(); i++) {String item = jp.getResultRlist().get(i);System.out.print(item + " , ");}}}

  运行结果:

处理前的顺序
卡卡 , 哈马西克 , 莫德里奇 , 皮尔洛 , 蒂亚戈.席尔瓦 , 巴神 , 伊布 , 卡瓦尼 , 费莱尼 , 小法老 , 厄齐尔 ,
处理后的顺序
蒂亚戈.席尔瓦 , 卡瓦尼 , 厄齐尔 , 莫德里奇 , 伊布 , 卡卡 , 巴神 , 哈马西克 , 小法老 , 皮尔洛 , 费莱尼 ,

转载于:https://www.cnblogs.com/lingxiasandu/p/3307967.html

约瑟夫问题(丢手帕问题)的java实现相关推荐

  1. 约瑟夫问题(丢手帕问题)

    /** * 作者:徐守威 * 功能:约瑟夫问题(丢手帕问题) * 具体问题:设编号为1,2,3....n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始 * 报数,数到m的那个 ...

  2. 丢手帕问题 java_丢手帕问题,java实现

    今天偶然发现一个很经典的算法问题:丢手帕问题.问题的具体描述是:N个人围成一圈,然后从第A个人开始报数(报数从1开始).报数为B的人出列,然后后面的人从新开始报数,请问,最后一个人是多少号. 刚开始觉 ...

  3. 约瑟夫问题,即丢手帕游戏

    /** @author sunqian @time 2015.1.27 @功能 约瑟夫(丢手帕)问题 @描述 n个小孩围坐,从k位小孩开始开始约定一个数m并开始轮流报数,数到m的小孩出列直到列表为空, ...

  4. 约瑟夫问题的理解与解决(丢手帕问题)

    又到了面试题的总结手机,下面让我们来看看如何理解与求解约瑟夫问题吧! 什么是约瑟夫问题? 简单来讲(小编个人理解):一堆人想要选择一个人来做事情(需要多个人),就选择一个数,排序到这个数的人去做这件事 ...

  5. 丢手帕问题(约瑟夫问题)

    设编号为1,2,n的n个人围坐一圈,约定编号为K(1=<K<=n)的人从1开始报数,数到m的人出列,她的下一位又从1开始报数,数到m的人又出列,以此类推直到所有人都出列,由此产生一个出队序 ...

  6. 丢手帕程序C语言,约瑟夫问题,即丢手帕游戏

    /** @author sunqian @time 2015.1.27 @功能 约瑟夫(丢手帕)问题 @描述 n个小孩围坐,从k位小孩开始开始约定一个数m并开始轮流报数,数到m的小孩出列直到列表为空, ...

  7. 丢手帕问题 java_丢手帕问题 (java实现)

    /** *@author zhouhong *@fuction:丢手帕问题 */ package com.zhouhong10; import com.zhouhong10.*; public cla ...

  8. 丢手帕java_java基于双向环形链表解决丢手帕问题的方法示例

    本文实例讲述了java基于双向环形链表解决丢手帕问题的方法.分享给大家供大家参考,具体如下: 问题:设编号为1.2--n的几个小孩围坐一圈,约定编号为k(1= 我们现在用一个双向环形链表来解这一问题. ...

  9. 丢手帕问题 java_java基于双向环形链表解决丢手帕问题的方法示例

    导读热词 本文实例讲述了java基于双向环形链表解决丢手帕问题的方法.分享给大家供大家参考,具体如下: 问题:设编号为1.2--n的几个小孩围坐一圈,约定编号为k(1= 我们现在用一个双向环形链表来解 ...

最新文章

  1. CPU 及 IO 平均开销较大脚本
  2. 如何创建一个数据科学项目?
  3. ECharts简单的运行示列(固定数据和交互数据库)
  4. 2012年12月工作总结
  5. 剑指offer:合并两个有序的链表
  6. Local Binary Convolutional Neural Networks ---卷积深度网络移植到嵌入式设备上?
  7. 操作系统学习(五) 、代码段和数据段描述符
  8. PMP之项目整合管理---各种工具与技术
  9. docker always_Ubuntu+Docker+STF环境搭建
  10. 微信 小程序组件 焦点切换
  11. 20190915:(leetcode习题)对称二叉树
  12. Pannellum:实例之为全景图添加指南针
  13. R. Shankar《Principles of Quantum Mechanics (2nd)》(山卡《量子力学原理(第二版)》)双语目录
  14. 工业AI落地场景案例实战,飞桨EasyDL让工业更智能
  15. 2018年迎春杯复赛入围名单(五年级)
  16. 《神经科学:探索脑》学习笔记(第5章 突触传递)
  17. java向飞秋发文件_飞秋如何发文件夹
  18. [物理学与PDEs]第4章习题1 反应力学方程组形式的化约 - 动量方程与未燃流体质量平衡方程...
  19. 淘宝网-接口测试白皮书V0.1
  20. centos7安装在NAT网络模式下无网络,显示“以太网(ens33)被拔出“?

热门文章

  1. #1419 : 后缀数组四·重复旋律4 (重复次数最多的连续字串)
  2. python 状态码转字典文本_python爬虫 处理521状态码
  3. 使用OpenSSL进行RSA加密和解密(非对称)
  4. php 目录限制,限定某个目录禁止解析php,限制user_agent,php相关配置
  5. Teamtalk源码分析
  6. python卸载后安装不上_[宜配屋]听图阁
  7. java jfinal 定时任务_JFinal 中的cron4j定时插件
  8. Java 枚举:实现接口
  9. tp5中在where中使用in
  10. Python账号密码登陆判断(三次机会)