小孩玩游戏,手拉手围成一个圈,然后数数.每次数到3的时候这个小孩退出,下一个从1开始再数.
试问,如果有500个小孩,最后剩下的小孩是原来的第多少个小孩.

public class Count3Quit{
public static void main(String []args){
   //定义一个数组用来当做500个人.并且初始化为true表示都在圈内
   boolean arr[] =new boolean[500];
   for(int i=0; i<arr.length; i++){
    arr[i]=true;
   }
   //定义一个总人数
   int count=arr.length;
   //定义一个索引位置,表示当前在那个位置
   int index=0;
   //计数器,数到3退出
   int countNum=0;
   //如果只剩下最后一个人就退出循环

   int jj=1;

   while(count>1){

  System.out.print(count+" ");
    if(arr[index]==true){ //如果当前的这个人在圈内就开始数数
     
     countNum++;
    
     if(countNum==3){ 
  
   jj++;
   System.out.print("第"+jj+"圈");
     
      countNum=0; // 如果数到3了就要把计数器归0
     
      arr[index]=false; //表示这个人已经退出
     
      count--; //总人数减去一个
     
     } 
    }
   
    index++;
   
    if(index==arr.length){
     index=0;
    }     
   }
   //找到最后一个在圈子内的人的下标位置
   for(int i=0 ;i<arr.length; i++){
    if(arr[i]==true){
     System.out.println("最后剩下的一个人在第"+(i+1)+"个位置");
    }
   }
}
}

 

黑色头发  http://heisetoufa.iteye.com