1. 程式人生 > >約瑟夫環問題

約瑟夫環問題

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));

	}

}


效果例如以下:

技術分享

約瑟夫環問題