1. 程式人生 > >【演算法】約瑟夫環

【演算法】約瑟夫環

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