代碼詳解Java猴子選王問題(約瑟夫環(huán))
關于約瑟夫環(huán)的基本知識:
羅馬人攻占了喬塔帕特,41人藏在一個山洞中躲過了這場浩劫。這41個人中,包括歷史學家josephus和他的一個朋友。剩余的39個人為了表示不向羅馬人屈服,決定集體自殺。大家決定了一個自殺方案,所有這41人圍城一個圓圈,由第一個人開始順時針報數(shù),沒報數(shù)為3的人就立刻自殺,然后由下一個人重新開始報數(shù)仍然是每報數(shù)為3的人就立刻自殺,......,知道所有人都自殺死亡為止.約瑟夫和他的朋友并不想自殺,于是約瑟夫想到了一個計策,他們兩個同樣參數(shù)到自殺方案中,但是最后卻躲過了自殺。請問是怎么做到的
代碼分享:
import java.util.HashMap; import java.util.Map; public class MonkeyKing { public static void main(String args[]) { int n = 100; // 猴子總數(shù) int m = 3; // 報數(shù)出局數(shù) @SuppressWarnings("rawtypes") Map map = new HashMap(); int nn = 1; // 報數(shù)序號 int mm = 1; // 報數(shù)號 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 整合 )實現(xiàn)方法
本篇文章主要介紹了SpringBoot定時任務兩種(Spring Schedule 與 Quartz 整合 )實現(xiàn)方法,詳細的介紹了Spring Schedule 與 Quartz 整合的兩種方法,有興趣的可以了解一下。2017-03-03Spring Boot 中常用的注解@RequestParam及基本用法
@RequestParam 是 Spring Framework 和 Spring Boot 中常用的注解之一,用于從請求中獲取參數(shù)值,本文給大家介紹Spring Boot 中常用的注解@RequestParam,感興趣的朋友一起看看吧2023-10-10struts1登錄示例代碼_動力節(jié)點Java學院整理
這篇文章主要介紹了struts1登錄示例代碼,需要的朋友可以參考下2017-08-08