#include <stdio.h>
#include <malloc.h>
typedef struct z
{
int data ;
struct z *next;
}zz;
int remain(int n);
int main(void)
{
int num;
do
{
printf("Please input n:");
scanf("%d",&num);
}while(num<3||num>200);
printf("\nResult is:\n");
printf("The remained student is %d.\n",remain(num));
}
int remain(int num)
{
int i,j;
zz *head,*tail;
head=tail=(zz *)malloc(sizeof(zz));
for(i=1;i<num;i++)
{
tail->data=i;
tail->next=(zz *)malloc(sizeof(zz));
tail=tail->next;
}
tail->data=i;
tail->next=head; //封闭成环
for(i=1;tail!=head;i++)
{
for(j=1;j<3;j++)
{
tail=head;
head=head->next;
}
tail->next=head->next;
printf("delete %d student %d.\n",i,head->data);
free(head);
head=tail->next;
}
i=head->data;
free(head);
return i;
}
画出草图有助理解