代码详解Java猴子选王问题(约瑟夫环)

 更新时间:2018年02月26日 09:51:30   作者:彬菌  
本篇文章通过实例给大家分析了java约瑟夫环这个经典内容,有兴趣的跟着小编一起学习下吧。

关于约瑟夫环的基本知识:

罗马人攻占了乔塔帕特,41人藏在一个山洞中躲过了这场浩劫。这41个人中,包括历史学家josephus和他的一个朋友。剩余的39个人为了表示不向罗马人屈服,决定集体自杀。大家决定了一个自杀方案,所有这41人围城一个圆圈,由第一个人开始顺时针报数,没报数为3的人就立刻自杀,然后由下一个人重新开始报数仍然是每报数为3的人就立刻自杀,......,知道所有人都自杀死亡为止.约瑟夫和他的朋友并不想自杀,于是约瑟夫想到了一个计策,他们两个同样参数到自杀方案中,但是最后却躲过了自杀。请问是怎么做到的

代码分享:

import java.util.HashMap; 
import java.util.Map; 
public class MonkeyKing { 
  public static void main(String args[]) { 
    int n = 100; // 猴子总数 
    int m = 3; // 报数出局数 
    @SuppressWarnings("rawtypes") 
    Map map = new HashMap(); 
    int nn = 1; // 报数序号 
    int mm = 1; // 报数号 
    System.out.println("-----------------------" + n + "只猴子选大王开始-----------------------"); 
    for (int i = 1; i < n + 1; i++) { 
      map.put(i, i); 
    } 
    while (map.size() > 1) { 
      if (mm == 3) { 
        map.remove(nn); 
      } 
      nn++; 
      if (nn == n + 1) { 
        nn = 1; 
      } 
      if (map.get(nn) != null) { 
        mm++; 
      } 
      if (mm == m + 1) { 
        mm = 1; 
      } 
    } 
    String result = map.values().toString(); 
    System.out.println("第" + result.substring(1, result.length() - 1) + "只猴子当选猴王"); 
  } 
}

相关文章

  • Intellij IDEA插件开发入门详解

    Intellij IDEA插件开发入门详解

    这篇文章主要介绍了Intellij IDEA插件开发入门详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 使用RestTemplate调用RESTful API的代码示例

    使用RestTemplate调用RESTful API的代码示例

    在开发 Web 应用程序时,调用 RESTful API 是一个常见的任务,本文将介绍如何使用 RestTemplate 调用 RESTful API,并提供示例代码,感兴趣的同学可以跟着小编一起来看看
    2023-06-06
  • RestTemplate发送HTTP GET请求使用方法详解

    RestTemplate发送HTTP GET请求使用方法详解

    这篇文章主要为大家介绍了关于RestTemplate发送HTTP GET请求的使用方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家<BR>33+多多进步
    2022-03-03
  • 详解springboot中的jar包部署步骤

    详解springboot中的jar包部署步骤

    这篇文章主要介绍了springboot中的jar包部署步骤及linux中部署项目常用指令,需要的朋友可以参考下
    2018-07-07
  • Java递归实现字符串全排列与全组合

    Java递归实现字符串全排列与全组合

    这篇文章主要为大家详细介绍了Java递归实现字符串全排列与全组合,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • mybatis-plus 实现查询表名动态修改的示例代码

    mybatis-plus 实现查询表名动态修改的示例代码

    通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus 实现查询表名动态修改的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • 基于tomcat8 编写字符编码Filter过滤器无效问题的解决方法

    基于tomcat8 编写字符编码Filter过滤器无效问题的解决方法

    下面小编就为大家分享一篇基于tomcat8 编写字符编码Filter过滤器无效问题的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • jdk11 jdk17多版本共存切换方式

    jdk11 jdk17多版本共存切换方式

    这篇文章主要介绍了jdk11 jdk17多版本共存切换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 教你用IDEA配置JUnit并进行单元测试

    教你用IDEA配置JUnit并进行单元测试

    今天教各位小伙伴怎么用IDEA配置JUnit并进行单元测试,文中有非常详细的图文介绍及代码示例,对正在学习IDEA的小伙伴有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • java中String.intern()方法功能介绍

    java中String.intern()方法功能介绍

    这篇文章主要介绍了java中String.intern()方法具有什么功能,主要包括String.intern原理,JDK6中String.intern()的相关知识,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-06-06

最新评论