package des.tiny.test.other;
/**
*
* @ClassName: OutGame
* @Description: m个人围成一圈一直报数n,结尾的人出局一直到剩下最后一个,打印出出局的人的坐标
* @author masques@sina.com
* @date 2015年4月15日 下午8:16:34
*/
public class OutGame {
public static void main(String[] args) {
int allCount = 9;
final int roundCount = 3;
final int arrSize = allCount;
boolean[] arr = new boolean[arrSize];
initArr(arr, Boolean.TRUE.booleanValue());
int initIndex = 0;// 初始化游标
while (allCount > 0) {
int count = 0;
for (int i = initIndex; i < arrSize; i++) {
if (arr[i]) {
count++;
}
if (count == roundCount) {
System.out.println(i + 1);
arr[i] = Boolean.FALSE.booleanValue();
initIndex = i + 1;// 得到下一个遍历开始的游标
if (initIndex == arrSize)
initIndex = 0;//得到最后一个数,从初始开始
break;
}
// 重置游标
if (i == arrSize-1 && count < roundCount) {
i = -1;//因为循环后还会执行i++;从0开始,故此处为-1;
}
}
allCount--;
}
}
//初始化所有的标志
private static void initArr(boolean[] arr, boolean flag) {
for (int i = 0; i < arr.length; i++) {
arr[i] = flag;
}
}
}