**问题:
有500个小朋友,围成一个圈,从第一个开始数1,数到3的小朋友退出,后面继续从1开始数,数到3的小朋友退出,这样执行下去,最后留下的小朋友是哪个?用数组模拟。**Java实现
public class Test{
public static void main(String[] args) throws Exception {
int OutNum = 0; //已退出的小朋友的个数
int cnt = 0; //小朋友数的数(1、2、3)
kid kids[] = new kid[500]; //创建500个小朋友
for(int i=0;i<500;i++)
{
kids[i] = new kid();
}
while(OutNum<499)
{
for(int i=0;i<500;i++)
{
if(kids[i].state==0) //只有状态为没退出的小朋友才能数数
{
cnt++; //数数
if(cnt==3) //判断数的是不是3
{
kids[i].state = 1; //如果数的数是3,该小朋友状态设置为退出
OutNum++; //已退出的小朋友的个数加一
cnt = 0; //准备重新从1开始数数
}
}
}
}
for(int i=0;i<500;i++)
{
if(kids[i].state == 0) //找出最后没退出的小朋友
System.out.printf("The last kid is:%d",i+1);
}
}
}
class kid{
public int state; //0表示该小孩的状态是没退出,1表示该小孩的状态是已退出
kid(){
state = 0; //初始时小孩的状态是没退出
}
}
输出结果:The last kid is:436