代码改变世界

逢三退一(boolean数组的使用)

2017-12-27 12:55  澄序源  阅读(2239)  评论(0编辑  收藏  举报
package com.hanqi.count;

// 逢三退一 输出留到最后值的索引;
public class Count1 {

	//主方法
	public static void main(String[] args) {
		Count1 c = new Count1();
		System.out.println(c.count(6));
		// 方法有返回值  , 传入数组长度(总共多少数);
	}

	// 逢3 退1;
	public int count (int in) {
		//声明一个boolean数组
		boolean arr[] = new boolean[in];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = true;
			//把数组的值替换为 ture; 
		}
		int count = arr.length ;  //总计数(获取数组长度)
		int threecount = 0; // 3次循环计数
		int index =0; //当前数组的序号
		while (count > 1) {
			//只要还有 1个以上的值为true 就会一直运行
			if(arr[ index ]) {
				threecount ++; // 值为treu 时+1 
				if(threecount == 3) {
					arr[index] = false;
					threecount = 0;
					count --; //进一遍总数减1 因为逢3去1  ;
				}
			}
			index ++;  // 放在 if判断上面 arr.length 长度为500 但是序号是从0开始所以到499结束;
			if (index == arr.length) {
				index = 0;
			}
			//index ++;  放在 if判断底下归零后立马加1 所以不行(逻辑问题);
		}
		int ret = 0;

		// 遍历 留到最后为true的值得索引
		for (int i = 0; i < arr.length; i++) {
			if (arr[i]) {
				// 值为true时输出i ,此时i为最后一个值的序号;
				//System.out.println(i);
				ret = i;
				break;
			}
		}
		return ret;
	}
	
}

 这道题提醒了我 换个思路看看;(用boolean数组解决问题)