继续磕算法呵呵。数三退一问题。

逻辑倒是够清晰,不过直觉告诉我方法肯定能改进。

//初始化数组。
boolean[] list = new boolean[500];
for (int i = 0; i < list.length; i++) {
    list[i] = true;
}

//count用来数三,limit用来在数组里只有一个true的时候结束循环。
int count = 0;
int limit = 0;

//如果上一次循环只数到过一次true位置,说明任务完成,跳出。
while (limit != 1) {
    
    //每次循环重置limit。
    limit = 0;
    
    //遍历数组。
    for (int i = 0; i < list.length; i += 1) {
        
        //如果这个位置已经跳出了,就不管他接着往下遍历,否则就数一。
        if (list[i] == false)
            continue;
        else
            count++;
        
        //数到三,退一。重置count。计一个true位置。
        if (count == 3) {
            list[i] = false;
            count = 0;
            limit++;
        }
    }
}

//打印数组。不打印也行。
for (boolean b: list) {
    System.out.println(b);
}

//遍历数组找出最后那个true,找到了就打印下标并跳出。不打印也行。
//也可以加一个变量在循环里记住true的下标,不过这样比较好看。
for (int i = 0; i < list.length; i++) {
    if (list[i] == true) {
        System.out.println(i);
        break;
    }
}
数三退一
原文地址:https://www.cnblogs.com/chihane/p/3438898.html