【算法】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); }