约瑟夫问题(丢手帕问题)的java实现
生活随笔
收集整理的這篇文章主要介紹了
约瑟夫问题(丢手帕问题)的java实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
約瑟夫問題: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实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#以文件流的形式输出xml(可以解决内
- 下一篇: 链表二路归并