日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

约瑟夫问题(丢手帕问题)的java实现

發布時間:2024/4/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 约瑟夫问题(丢手帕问题)的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实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。