用c语言代码实现m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。输出最后退出的是原来的第几号(最初的序号,以1起始)。若m=6,则最后退出的是1号,退出的顺序是 : 3 6 4 2 5 1;若m=10,则最后退出的是4号,退出顺序是: 3 6 9 2 7 1 8 5 10 4;若m=100,则最后退出的是91号,退出顺序是: 3 6 9……100 58 91。 编写函数int fun(int m ,int p[ ])实现上述功能,返回m个人中最后退出人的序号,并将退出的序号顺序写入p指向的数组中。在主函数中输入人数,调用fun后输出实参数组中保存的退出序号。每行输出10个数据。 本问题限定人数m不超过200人。
时间: 2023-06-10 17:07:04 浏览: 106
有100个人围成一个圈,从1开始报数,报到14的这个人就要退出
5星 · 资源好评率100%
以下是用 C 语言实现的代码:
```c
#include <stdio.h>
int fun(int m, int p[]) {
int i, j, k;
int a[200];
for (i = 0; i < m; i++) {
a[i] = i + 1;
}
i = 0;
j = m - 1;
k = 0;
while (j > 0) {
k++;
if (k == 3) {
p[m - j] = a[i];
j--;
k = 0;
for (int x = i; x < j; x++) {
a[x] = a[x + 1];
}
} else {
i++;
}
if (i == j) {
p[m - j] = a[i];
j--;
i = 0;
}
}
return a[0];
}
int main() {
int m, p[200];
printf("请输入人数m:");
scanf("%d", &m);
int last = fun(m, p);
printf("最后退出的是原来的第%d号\n", last);
printf("退出顺序是:\n");
for (int i = 0; i < m; i++) {
printf("%d ", p[i]);
if ((i + 1) % 10 == 0) {
printf("\n");
}
}
printf("\n");
return 0;
}
```
函数 `fun` 用于解决问题,返回最后退出的人的序号,同时将退出的顺序存储在数组 `p` 中。在主函数中,先输入人数 `m`,然后调用 `fun` 函数求解。最后输出最后退出的人的序号和退出顺序。每行输出 10 个数据。
阅读全文