【算法】约瑟夫环
有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);}?
轉載于:https://www.cnblogs.com/chuanyueinlife/p/10096117.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: 第一次迭代心得
- 下一篇: Error: rpmdb open fa