发新话题
打印

求大家帮我看个小代码

求大家帮我看个小代码

问题就是,有n个人围成一圈,从第一个开始数,数到3则喊3的这个人出列,下一个人接着从一开始数,如此循环,问最后剩下一个的是几号???


我是用个循环单链表实现的,但是代码写好后,无论在TC还是。NET上,都有问题,请大家帮我找找,问题出在哪,先谢大家了。
这是我写的,请大家批评。


typedef struct list
{
  int data;
  struct list*next;
}listype;

main()
{
   int m,n;
   listype *h,*s,*x,*y;
   printf("n=");
   scanf("%d",&n);
   m=n;
   if((h=(listype*)malloc(sizeof(listype)))=NULL)
      return 0;
   h->next=NULL;
   h->data=1;
   x=h;
   for(int i=2;i<=n;i++)
   {
      if((s=(listype*)malloc(sizeof(listype)))=NULL)
         return 0;
      s->data=i;
      s->next=NULL;
      x->next=s;
      x=x->next;
   }
   s->next=h;
   x=h;
   while(m!=1)
   {
      for(int j=0;j<1;j++)
      {
          x=x->next;
      }
      y=x->next;
      x->next=y->next;
      free(y);
      m--;
      if(m!=1)
         x=x->next;
   }
   printf("\n");
   printf("%d->%d",n,x->data);
   printf("\n");
}

TOP

用一个一维数组也是可以的,很简单就可以实现了!

TOP

不小心说错了,我没有考虑到N

TOP

发新话题