有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。c语言
时间: 2023-12-23 14:44:56 浏览: 82
可以使用数组来表示这n个人,用一个变量来表示当前轮到的人的位置,同时用一个计数器来表示已经报数的人数。每次报数时,计数器加1,如果计数器的值为3,则将该位置的人标记为退出,并将计数器清零。最后,留下来的那个人就是没有被标记为退出的那个人。
以下是C语言的实现:
```c
#include <stdio.h>
int main() {
int n, i, count, pos;
printf("请输入人数:");
scanf("%d", &n);
// 初始化数组
int arr[n];
for (i = 0; i < n; i++) {
arr[i] = 1;
}
count = 0;
pos = 0;
while (1) {
if (arr[pos] == 1) {
count++;
if (count == 3) {
arr[pos] = 0;
count = 0;
}
}
pos++;
if (pos == n) {
pos = 0;
}
// 判断是否只剩下一个人
int remain = 0;
for (i = 0; i < n; i++) {
if (arr[i] == 1) {
remain++;
}
}
if (remain == 1) {
break;
}
}
// 输出留下来的人的位置
for (i = 0; i < n; i++) {
if (arr[i] == 1) {
printf("留下来的人是第%d个人\n", i + 1);
}
}
return 0;
}
```
运行结果:
```
请输入人数:10
留下来的人是第4个人
```
阅读全文