有n个人围城一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的c语言代码
时间: 2023-12-23 12:14:01 浏览: 63
以下是使用 C 语言编写的解决方案:
```c
#include <stdio.h>
int main() {
int n, count, i, j, num = 0;
printf("请输入围成一圈的人数n:");
scanf("%d", &n);
int arr[n];
for (i = 0; i < n; i++) {
arr[i] = i + 1;
}
i = 0;
j = n;
while (j > 1) {
if (arr[i] != 0) {
num++;
}
if (num % 3 == 0) {
arr[i] = 0;
j--;
}
i++;
if (i == n) {
i = 0;
}
}
for (i = 0; i < n; i++) {
if (arr[i] != 0) {
printf("最后留下的是原来的第%d号\n", arr[i]);
break;
}
}
return 0;
}
```
解释一下:
1. 首先,我们需要输入围成一圈的人数 n。
2. 然后,我们用数组 arr 存储每个人的编号,同时初始化为 1 到 n。
3. 接着,我们用 i 作为指向当前报数人的索引,j 记录当前还没退出圈子的人数,num 记录当前已经报数的人数。
4. 在循环中,我们先判断当前报数人是否已经退出圈子,如果没有,我们就让 num 加 1。如果 num 能被 3 整除,说明当前报数人需要退出圈子,我们就将该人的编号对应的数组元素置为 0,并让 j 减 1。
5. 最后,我们循环遍历数组,找到最后留下的编号,并输出即可。
注意:这个算法是从第一个人开始报数,所以最后留下的不一定是原来的第一个人。
阅读全文