13个人围成一圈,从第一个人开始顺序报号,1,2,3,报到3者退出圈子,找出最后留在圈子中的人原来的序号,要求用链表实现
#include<stdio.h>
#define NUM 13
struct peo
{
int num;
struct peo* next;
};
int main()
{
struct peo arr[NUM] = { 0 };
//建立环状链表
struct peo* head = arr;
for (int i = 0; i < NUM; i++)
{
head->num = i + 1;
head->next = &arr[i + 1];
head = head->next;
}
arr[NUM - 1].next = arr;
int count = NUM;
int j = 1;
head = arr;
while (count > 1)
{
//判断是否已经退出
if (head->num == 0)
{
head = head->next;
continue;
}
if (j == 3)
{
printf("第%d个人退出\n",head->num);
head->num = 0;
count--;
}
j++;
head = head->next;
if (j > 3)
{
j = 1;
}
}
while (head->num == 0)
{
head = head->next;
if (head->num != 0)
printf("没有退出的人是:%d\n",head->num);
}
return 0;
}
输出结果: