代码详解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) + "只猴子当选猴王"); 
  } 
}

相关文章

  • SpringBoot定时任务两种(Spring Schedule 与 Quartz 整合 )实现方法

    SpringBoot定时任务两种(Spring Schedule 与 Quartz 整合 )实现方法

    本篇文章主要介绍了SpringBoot定时任务两种(Spring Schedule 与 Quartz 整合 )实现方法,详细的介绍了Spring Schedule 与 Quartz 整合的两种方法,有兴趣的可以了解一下。
    2017-03-03
  • 升级springboot3之自动配置导入失效问题及解决

    升级springboot3之自动配置导入失效问题及解决

    这篇文章主要介绍了升级springboot3之自动配置导入失效问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • SpringBoot动态更新yml文件

    SpringBoot动态更新yml文件

    在系统运行过程中,可能由于一些配置项的简单变动需要重新打包启停项目,这对于在运行中的项目会造成数据丢失,客户操作无响应等情况发生,针对这类情况对开发框架进行升级提供yml文件实时修改更新功能,这篇文章主要介绍了SpringBoot动态更新yml文件
    2023-01-01
  • IDEA无法使用Git Pull的问题

    IDEA无法使用Git Pull的问题

    本文主要介绍了IDEA无法使用Git Pull的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Spring Boot 中常用的注解@RequestParam及基本用法

    Spring Boot 中常用的注解@RequestParam及基本用法

    @RequestParam 是 Spring Framework 和 Spring Boot 中常用的注解之一,用于从请求中获取参数值,本文给大家介绍Spring Boot 中常用的注解@RequestParam,感兴趣的朋友一起看看吧
    2023-10-10
  • Java中二叉树的建立和各种遍历实例代码

    Java中二叉树的建立和各种遍历实例代码

    这篇文章主要介绍了Java中二叉树的建立和各种遍历实例代码,涉及树节点的定义,后序遍历,层序遍历,深度优先和广度优先等相关内容,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • struts1登录示例代码_动力节点Java学院整理

    struts1登录示例代码_动力节点Java学院整理

    这篇文章主要介绍了struts1登录示例代码,需要的朋友可以参考下
    2017-08-08
  • Java中自定义注解类及使用实例解析

    Java中自定义注解类及使用实例解析

    这篇文章主要介绍了Java中自定义注解类并使用过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 详解MybatisPlus中@Version注解的使用

    详解MybatisPlus中@Version注解的使用

    在MyBatisPlus中,常常使用@Version实现乐观锁,该注解用于字段上面。本文将通过示例详细讲解@Version注解的使用,感兴趣的可以了解一下
    2022-06-06
  • Java生成word文档的示例详解

    Java生成word文档的示例详解

    这篇文章主要为大家详细介绍了如何利用Java语言生成word文档,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以参考一下
    2022-12-12

最新评论