用C语言写:有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
时间: 2023-11-27 12:54:34 浏览: 197
以下是用C语言实现的解题思路:
1. 定义一个数组存储 n 个人的编号,初始化为 1~n。
2. 定义一个变量 count,表示当前数到第几个人了,初始化为 0。
3. 定义一个变量 index,表示当前数组中正在数的人的下标,初始化为 0。
4. 在一个 while 循环中进行报数和淘汰的操作,直到数组中只剩下一个人。
5. 在循环中,每数到一个人就将 count 加 1,如果 count 等于 3,则将当前人淘汰,并将 count 重置为 0。同时将 index 加 1,指向下一个正在数的人。如果当前 index 超过了数组的长度,则将其重置为 0。
6. 当数组中只剩下一个人时,输出该人的编号。
下面是完整的代码实现:
```c
#include <stdio.h>
int main() {
int n, i, count = 0, index = 0;
printf("请输入总人数 n:");
scanf("%d", &n);
int nums[n];
for (i = 0; i < n; i++) {
nums[i] = i + 1;
}
while (n > 1) {
if (nums[index] != 0) {
count++;
if (count == 3) {
nums[index] = 0;
count = 0;
n--;
}
}
index++;
if (index == n) {
index = 0;
}
}
for (i = 0; i < n; i++) {
if (nums[i] != 0) {
printf("最后留下的是原来的第 %d 号的那位。\n", nums[i]);
break;
}
}
return 0;
}
```
阅读全文