【演算法】約瑟夫環
阿新 • • 發佈:2018-12-10
有n 個人圍城一圈每次從1數起數到3就把那個人提出圈子,最後只保留一個人。
輸入: 輸入人數字符串
輸出:把最後一個人所保留位置返回出來。
比如你輸入11 的話即有11個人 [1,2,3,4,5,6,7,8,9,10,11] 。返回的是7
package sj1; import java.util.ArrayList; import java.util.List; /** * * @author Administrator * 剔出某數字 */ public class sjt1_2 {int number; //總數 int m;//要被剔除的數字 /** * 剔除方法 * @param number 總數 * @param m 數數剔除的數字,比如3 */ public static void delete(int number, int m) { List<Integer> ins = new ArrayList<Integer>(); /* 塞數字 */ for (int i = 1; i < number+1; i++) { ins.add(i); } System.out.println("構造了原始值:" + ins); int index = 0;// 被T的人在列表中下標 m = m-1;//減一算出下標 for (int i = 0; i < number; i++) { //最後一個跳出 if(ins.size() ==1 ){ break; } // 從0開始數數 index = (index + m) % ins.size();//核心演算法 System.out.println(index); System.out.println("第 ["+(i+1)+"] 次剔除了" + ins.get(index)); ins.remove(index); System.out.println("還剩下:" + ins); } } public static void main(String args[]) { delete(11, 3); }