问题就是,有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");
}