1. 程式人生 > >java程式碼面向物件實現:500人圍成一圈,數3退一,求最後留下的人的最初位置

java程式碼面向物件實現:500人圍成一圈,數3退一,求最後留下的人的最初位置

 public class TestCycle3{
 public static void main(String[] args){
  KidCycle cycle = new KidCycle(500);
  Kid k= cycle.first;
  int j=0;
  while(cycle.count>1){
   j++;
   if(j==3){
    cycle.delete(k);
    j=0;
   }
   k = k.right;
  }
  System.out.println("k.id="+k.id);
  System.out.println("cycle.first.id="+cycle.first.id);
 }
}
class Kid{
 int id;
 Kid left;
 Kid right;
}
class KidCycle{
 int count=0;
 Kid first,last;
 
 KidCycle(int n){
  for(int i=0;i<n;i++){
   add();
  }
 }
 void add(){
  Kid k = new Kid();
  k.id = count;
  if (count==0){
   k.left= k;
   k.right =k;
   first =k;
   last = k;
  }else {
   last.right = k;
   k.left=last;
   k.right= first;
   first.left = k;
   last = k;
   
  }
  count ++;
 }
 
 void delete(Kid k){
  if(count<=0){
   return;
  }else if(count ==1){
   first = last =null;
  }else {
   k.left.right= k.right;
   k.right.left= k.left;
   if(first == k){
    first= k.right;
   }else if(last ==k ){
    last = k.left;
   }
  }
  count--;
 }
   
}