用C语言编程编写这样一个问题:有n人围成一,按顺序编号。 从第1个人开始报数(1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。
时间: 2023-12-27 11:10:41 浏览: 80
可以用如下的C语言代码来解决这个问题:
```c
#include <stdio.h>
int main() {
int n;
printf("请输入总人数: ");
scanf("%d", &n);
int i, count = 0;
int arr[n]; // 定义一个长度为n的数组
for (i = 0; i < n; i++) {
arr[i] = i + 1; // 初始化数组
}
int index = 0;
while (count < n - 1) { // 只要留下的人数不为1,就继续报数
if (arr[index] != 0) { // 如果这个人还在圈子里
count++; // 报数
if (count % 3 == 0) { // 如果报到3了
arr[index] = 0; // 标记为离开
}
}
index++; // 下一个人
if (index == n) { // 如果已经到了最后一个人
index = 0; // 从第一个人继续报数
}
}
for (i = 0; i < n; i++) {
if (arr[i] != 0) { // 找到最后留下的那个人
printf("最后留下的是原来的第%d号\n", arr[i]);
break;
}
}
return 0;
}
```
代码的思路是:首先定义一个长度为n的数组,用来表示这n个人是否还在圈子里,然后从第1个人开始报数,每报到3就标记为离开。当留下的人数为1时,就找到最后留下的那个人的编号,输出即可。
阅读全文