用指针的方式完成:

来源:百度知道 编辑:UC知道 时间:2024/07/02 06:05:26
有n 个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 尽量简单化 准确化 谢谢
在TC2.0下完成的!!!

#include <stdio.h>
#define N 6 /*这里N值表示人数*/
typedef struct NODE{ /*结构体存储每个人的id号,并且用指着连接下个人的地址*/
int id;
struct NODE *next;
}node,*lnode;
void main()
{
int i=0,count=N;
node *p,*q,*r;
r=NULL;
clrscr();
while(i<N)
{
p=(lnode)malloc(sizeof(node)); /*为指针申请空间*/
if(r==NULL)
{
r=p;
q=p;
}
else
{
q->next=p;
q=p;
}
p->id=i+1;
i++;
}
p->next=r;
p=r;
i=1;
while(1)
{
i++;
if(count==1)break; /*如果只有一个人的时候则跳出循环*/
if(i==3)
{
q=p->next; /*如果报号为3的号则删除这个结点*/
p->next=q->next;
printf("remove %d:\n",q->id);
free(q);
i=1;
count--;
}
p=p->next;
}
printf("%d is alive!\n",p->id); /*输出最后这个人的id号*/

}