500个人围成一圈,从第一个人开始数数,数到第三个人,第三个人就退出,然后从第四个人开始继续数到3就退出一人,最后只城下一个人的时候就输出那个人的下标!?????????
class Kid{
int id;
Kid right;
Kid left;
}
class KidCircle{
int count=0;
Kid first,last;
  KidCircle(int n){
   for(int i=0;i<n;i++){
   Add();
   }
   }
  
   void Add(){
   Kid k=new Kid();
   k.id=count;
   if(count<=0){
   first=k;
   last=k;
   k.left=k;
   k.right=k;
   } 
    else{
   k.right=first;
   first.left=k;
   k.left=last;
   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(k==first){
first=k.right;
}else if(k==last){
last=k.left;
}
}
count--;
}
}
public class Count3Quit1{
public static void main (String [] args){
KidCircle kc=new KidCircle(500);
int countNum=0;
Kid k=kc.first;
while(kc.count>1){
countNum++;
if(countNum==3){
kc.Delete(k);
countNum=0;
}
k=k.right;
}
System.out.println(kc.first.id);
}
}

解决方案 »

  1.   

    你好像放错地方了。 提到向上最近的一个括号里面吧。
    就是 你放在类里面了,应该放到Delete()里
    对吧
      

  2.   

    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(k==first){ 
    first=k.right; 
    }else if(k==last){ 
    last=k.left; 


    count--; 


    去掉这个括号。
      

  3.   

    class Kid
    {
    int id;
    Kid left;
    Kid right;
    }class KidCircle
    {
    int count=0;
    Kid first,last;

    KidCircle(int n)
    {
    for (int i=0;i<n;i++)
      add();
    }

    void add()
    {
    Kid k = new Kid();
    k.id = count; if (count<=0)
    {
    first=last=k;
    k.left=k.right=k;
    }
    else
    {
    k.left=last;
    k.right=first;
    first.left = k;
    last.right = k;
    last = k;
    }
    count++;
    }

    void delete(Kid k)
    {
    if (count<=1)
      return;
    else
    {
    k.left.right = k.right;
    k.right.left = k.left;
    }

    count--;
    }
    }public class test
    {
    public static void main(String args[])
    {
    KidCircle kc = new KidCircle(500);
    int countNum = 0;
    Kid k = kc.first;

    while (kc.count>1)
    {
    countNum++;
    if (countNum%3==0)
    {
    kc.delete(k);
    }
    k = k.right;
    }
    System.out.println("result:"+k.id);
    }
    }
      

  4.   

    count--;这句上边多了个},去掉这个括号就行了