13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用链表实现。
程序员文章站
2022-05-28 21:49:35
...
13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用链表实现。
#include <stdio.h>
#include <stdlib.h>
struct Person{ //定义结构体
int num;
struct Person *next;
};
int main()
{
struct Person per[13]; //定义结构体变量数组
int i;
for (i=0; i<13; i++){ //此循环给13个人标注序号,1对应第一个人,以此类推,同时实现循环链表,当到达链表最后一个时,地址指向开头。
per[i].num=i+1;
if (i==12) per[i].next=&per[0];
else per[i].next=&per[i+1];
}
struct Person *p,*p1;
for (p=per, i=1; p->next!=p; p=p->next){ //循环报号,当每次报到第3个人时,next指针直接跳过下一个变量,指向下下个变量,当next指针指向自己时结束循环。
i++;
if (i==3){
p1=p->next;
printf("%d ", p1->num);
p->next=p->next->next;
i=1;
}
}
printf("\nThe number is %d\n", p->num); //输出结果
system("pause");
return 0;
}
上一篇: php实战第二天