用c语言写有n个人围成一圈,顺序排号。从第一人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 程序的运行示例如下: 请输入人数:30 30个人中最后留下的是第29号。
时间: 2024-04-23 13:05:21 浏览: 31
您好,我可以回答这个问题。这是一个经典的约瑟夫问题,可以使用循环链表来解决。具体思路是,创建一个有 n 个节点的循环链表,每个节点表示一个人,节点编号从 1 到 n。然后从第一个节点开始遍历,进行报数判断,将报数为 3 的节点从链表中删除,直到只剩下一个节点为止,该节点即为最后留下的人。
以下是用 C 语言实现这个算法的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点
struct Node {
int number; // 节点编号
struct Node *next; // 下一个节点的指针
};
int main() {
int n;
printf("请输入人数:");
scanf("%d", &n);
// 创建循环链表
struct Node *head = (struct Node*) malloc(sizeof(struct Node));
head->number = 1; // 从编号为 1 的节点开始报数
struct Node *tail = head;
for (int i = 2; i <= n; i++) {
struct Node *node = (struct Node*) malloc(sizeof(struct Node));
node->number = i;
tail->next = node;
tail = node;
}
tail->next = head; // 将最后一个节点指向头节点,形成循环链表
// 开始报数
struct Node *p = head; // 从头节点开始遍历
while (p->next != p) { // 只剩下一个节点时停止遍历
struct Node *del = p->next->next; // 跳过下一个节点,删除报数为 3 的节点
free(p->next);
p->next = del;
p = del; // 将指针移到下一个节点,继续报数
}
printf("%d个人中最后留下的是第%d号。\n", n, p->number);
free(p); // 释放最后剩下的那个节点
return 0;
}
```
希望这个回答能够帮到您。如果您有其他问题,欢迎继续提问。
阅读全文
相关推荐

















