继续磕算法呵呵。数三退一问题。
逻辑倒是够清晰,不过直觉告诉我方法肯定能改进。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//初始化数组。 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; } }