m个人围成一圈一直报数n,结尾的人出局一直到剩下最后一个,打印出出局的人的坐标...

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


转载于:https://my.oschina.net/bughope/blog/404679

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值