c语言编程键盘输入人数n,从第一个人开始顺序报号1、2、3。凡报到3者退出,找出最后留在圈子中的人原来的序号。用链表实现。
时间: 2023-06-17 15:04:51 浏览: 98
以下是C语言实现,使用了链表数据结构:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int num;
struct node *next;
} Node;
int main() {
int n, i;
printf("请输入人数n:");
scanf("%d", &n);
// 构建循环链表
Node *head, *curr, *prev;
head = (Node*)malloc(sizeof(Node));
head->num = 1;
curr = head;
for (i = 2; i <= n; i++) {
prev = curr;
curr = (Node*)malloc(sizeof(Node));
curr->num = i;
prev->next = curr;
}
curr->next = head;
// 循环报数,直到只剩一个人
int count = 1;
while (curr->next != curr) {
if (count == 3) {
prev->next = curr->next;
free(curr);
curr = prev->next;
count = 1;
} else {
prev = curr;
curr = curr->next;
count++;
}
}
// 输出最后剩下的人
printf("最后留在圈子中的人原来的序号是:%d\n", curr->num);
return 0;
}
```
首先,读入人数n。然后使用循环链表构建每个人的序号。循环报数时,每报到3就删除当前节点,直到只剩下一个人为止。最后输出最后剩下的人的序号。
阅读全文