c语言写有n个人围成一圈,顺序排号。从第一个人开始报数,凡报到m的人退出圈子,从下一个人开始又从1开始报数,直到所有人出列。输入整数n和m,按照退出顺序输出退出人的编号。
时间: 2024-05-08 18:17:52 浏览: 101
```
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, m;
printf("请输入n和m:");
scanf("%d%d", &n, &m);
int* a = (int*)malloc(n * sizeof(int)); // 动态分配数组
for (int i = 0; i < n; i++) {
a[i] = i + 1; // 初始化数组
}
int count = 0; // 记录已经出圈的人数
int index = 0; // 记录当前报数的人的下标
while (count < n) {
int i = 0; // 记录当前报数的人的编号
while (i < m) {
if (a[index] != 0) { // 如果这个人还没有出圈
i++; // 报数
}
if (i == m) { // 报到了m
printf("%d ", a[index]); // 输出出圈的人的编号
a[index] = 0; // 标记这个人已经出圈
count++; // 出圈人数加一
}
index++; // 下一个人
if (index == n) { // 已经数完一遍了
index = 0; // 重新开始
}
}
}
free(a); // 释放动态分配的数组内存
return 0;
}
```
阅读全文