这个问题我曾经也烦恼过,虎哥帮我解答了你可去看看他的解法,不过后来学到集合后我用集合写了算法代码希望对你有帮助[code=java]package com.sort;
import java.util.ArrayList;
import java.util.List;
public class Josephus {
/**
* 功能Josephus问题解答
*
* @param total总数
* @param gap间隔数
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Integer> list = new ArrayList<Integer>();
int total = 20;
int gap = 13;
// 编号
for (int i = 1; i < 21; i++) {
list.add(i);
}
fun(list, gap);
}
public static void fun(List<Integer> list, int gap) {
int index = 0;// 计算器用于记住数了多少个
while (list.size() > 1) {
for (int i = 0; i < list.size(); i++) {
index++;
// 当数到gap时该元素被移除
if (index == gap) {
System.out.println("第" + list.get(i) + "个被移除");
list.remove(i);
// 因为第i个被删除 掉了所以第i+1个上来顶了他的位置即变成了第i个,
// 此时相当于已经数了一个所以index=1
index = 1;
}
}
}
System.out.println("最后剩下" + list.get(0));
}
}[/code]结果[code=java]第13个被移除
第6个被移除
第20个被移除
第14个被移除
第9个被移除
第5个被移除
第3个被移除
第2个被移除
第4个被移除
第8个被移除
第12个被移除
第18个被移除
第11个被移除
第7个被移除
第10个被移除
第17个被移除
第19个被移除
第16个被移除
第15个被移除
最后剩下1[/code] |