有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。不用函数,编写一段程序实现计算
时间: 2023-12-23 13:17:54 浏览: 78
好的,以下是实现代码,你可以参考一下:
```c
#include <stdio.h>
int main() {
int n;
printf("请输入围成一圈的人数 n:");
scanf("%d", &n);
int *arr = (int *)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
arr[i] = i + 1;
}
int i = 0, j = 0, count = 0;
while (count < n - 1) {
if (arr[i] != 0) {
j++;
}
if (j == 3) {
arr[i] = 0;
j = 0;
count++;
}
i++;
if (i == n) {
i = 0;
}
}
int result = 0;
for (int i = 0; i < n; i++) {
if (arr[i] != 0) {
result = arr[i];
break;
}
}
printf("最后留下的是原来第 %d 号的那位。\n", result);
free(arr);
return 0;
}
```
程序中首先输入围成一圈的人数 `n`,然后使用动态内存分配来创建长度为 `n` 的数组 `arr`,并初始化为 `1, 2, 3, ..., n`。接着使用两个循环变量 `i` 和 `j`,以及变量 `count` 来模拟报数的过程,当 `j` 等于 3 时,表示当前报数的人要退出圈子,将其标记为 0,并将 `count` 加 1。最后在数组 `arr` 中查找不为 0 的数,即为最后留下的那个人的编号。
阅读全文