问题:500个小孩手拉手围成一圈,从第一个小孩开始数数,按照1、2、3、1、2、3循环不断的数,数到3的小孩退出圈,其他小孩接着数,直到剩下一个小孩,问这个小孩的排在什么位置?
思路分析:可以定义一个布尔型的数组,用来存放500个小孩,若为true,代表在圈内,若为false,则代表出圈。首先,每个小孩都在圈内(即数组中的元素都赋值为true),从第一个小孩开始数,首先判断其是否在圈内,若在,继续数(countNum自加1),若不在,忽略掉他的存在,从下个小孩接着数,当数到3时,这个小孩定义为false,剩余小孩的的数目自减1,知道剩一个小孩。
程序如下:
public class Count3Quit { public static void main(String[] args) { boolean[] arr = new boolean[500]; //布尔型数组,true表示还在,false表示退出。 for(int i=0; i1) { //只要剩余人数大于1,就继续数 if(arr[index] == true) { // 若数到第index个人,此人没有退出,就继续数 countNum++; if(countNum ==3) { //数到3,此小孩出圈 countNum = 0; arr[index] = false; leftCount --; } } index ++; if(index == arr.length) { index = 0; } } for(int i=0; i