有n个人围成一圈,顺序排号。从第1人开始报数(从1到3),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。用c语言指针处理
时间: 2023-12-23 17:48:49 浏览: 70
我们可以使用一个指针来遍历这个圈中的每一个人,并计算报数。当报数到达3时,就将这个人从圈中删除,并继续遍历下一个人。我们可以使用一个循环来实现这个过程,并使用一个变量来记录剩余的人数。
例如,我们可以使用以下代码来实现这个过程:
```
#include <stdio.h>
int main(void) {
int n = 10; // 圈中的人数
int count = 0; // 计数器
int *p = malloc(n * sizeof(int)); // 分配内存空间
// 初始化每个人的编号
for (int i = 0; i < n; i++) {
p[i] = i + 1;
}
// 遍历圈中的每一个人
for (int i = 0; i < n; i++) {
count++; // 报数
if (count == 3) { // 如果报数到达3
count = 0; // 重置计数器
p[i] = 0; // 删除这个人
n--; // 剩余人数减1
}
}
// 打印最后留下的人的编号
for (int i = 0; i < n; i++) {
if (p[i] != 0) {
printf("%d\n", p[i]);
}
}
free(p); // 释放内存空间
return 0;
}
```
在这段代码中,我们使用了一个指针 `p` 来保存每一个人的编号,并使用两个循环遍历圈中的每一个人。在第一个循环中,我们使用计数器来记录报数,并在报数到达3时删除
阅读全文