用指针实现以下功能:有n个人围成一个圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。 (1)编程提示 每三个人离开,置为0;当数到最后一个人时,将指针重新指向第一个人;m表示离开的人数,当m=n-1时,说明只剩下一个人,循环结束。 输入样例: 10 输出样例: 4
时间: 2024-03-24 13:36:47 浏览: 52
有100个人围成一个圈,从1开始报数,报到14的这个人就要退出
5星 · 资源好评率100%
以下是用指针实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100
int main()
{
int n, m, i, *p, *q, *r;
int a[MAXN];
// 输入总人数
printf("Input the number of people: ");
scanf("%d", &n);
// 初始化人员编号
for (i = 0; i < n; ++i) {
a[i] = i + 1;
}
// 设置指针初始位置
p = a;
q = a + n - 1;
// 循环报数
for (m = 0; m < n - 1; ++m) {
// 每三个人离开,置为0
for (i = 1; i <= 3; ++i) {
if (p == q) {
p = a;
} else {
++p;
}
while (*p == 0) {
if (p == q) {
p = a;
} else {
++p;
}
}
}
// 离开的人编号设置为0
*p = 0;
// 当数到最后一个人时,将指针重新指向第一个人
if (p == q) {
p = a;
} else {
++p;
}
// 跳过编号为0的人
while (*p == 0) {
if (p == q) {
p = a;
} else {
++p;
}
}
}
// 输出最后留下的人员编号
for (r = a; *r == 0; ++r);
printf("The last person is number %d.\n", *r);
return 0;
}
```
阅读全文