約瑟夫環問題
阿新 • • 發佈:2017-06-01
clas 分享 技術 () trac == 約瑟夫環問題 avi str
約瑟夫環問題:50個人圍成一圈,數到3和3的倍數時出圈,問剩下的人是誰?在原來的位置是多少?
思路例如以下:
1)首先,把數據填充到數組或鏈表中。
2)用一個while循環進行出圈。直到僅僅剩下一個元素留下。
代碼例如以下:
package cn.wuhan.unit7; import java.util.*; public class YueSeFu { public static int cycle(int total,int k){ List<Integer> dataList = new LinkedList<Integer>();//創建一個鏈表 for(int i=0;i<total;i++) //加入數據成員 dataList.add(new Integer(i+1)); int index=-1; //循環 while(dataList.size()>1){ index = (index+k)%dataList.size();//以(index+k)對size()取余 dataList.remove(index--); } return ((Integer)dataList.get(0).intValue());//返回它的值 } public static void main(String[] args) { System.out.println("該人原來的位置是: "+cycle(50,3)); } }
效果例如以下:
約瑟夫環問題