c语言写有n个人围成一圈,顺序排号。从第一个人开始报数,凡报到m的人退出圈子,输入整数n和m,并按照退出顺序输出退出人的编号。
时间: 2024-05-03 20:22:26 浏览: 16
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int num; // 编号
struct Node *next; // 下一个节点
} Node;
int main() {
int n, m, i;
printf("请输入总人数n和数到m退出的数字:\n");
scanf("%d%d", &n, &m);
// 创建循环链表
Node *head = NULL, *tail = NULL;
for (i = 1; i <= n; i++) {
Node *node = (Node *) malloc(sizeof(Node));
node->num = i;
if (tail == NULL) {
head = tail = node; // 第一个节点
} else {
tail->next = node;
tail = node;
}
}
tail->next = head; // 链表变为循环链表
// 开始数数
Node *cur = head, *prev = tail;
while (n > 0) {
for (i = 1; i < m; i++) {
prev = cur;
cur = cur->next;
}
printf("%d ", cur->num);
prev->next = cur->next; // 删除当前节点
Node *temp = cur;
cur = cur->next;
free(temp); // 释放节点内存
n--;
}
return 0;
}
```