写一个c语言程序 有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。不用循环链表
时间: 2023-12-23 19:52:58 浏览: 53
以下是使用数组模拟的 C 语言程序,实现了上述需求:
```c
#include <stdio.h>
#define MAX_NUM 100 // 最大人数
int main()
{
int n, i, j, count = 0, left; // left 为最后留下的人的编号
int num[MAX_NUM] = {0}; // 用数组模拟围成一圈的人
printf("请输入人数n(1<=n<=100): ");
scanf("%d", &n);
// 初始化编号
for (i = 0; i < n; i++) {
num[i] = i + 1;
}
// 报数
for (i = 0; i < n; i++) {
if (num[i] == 0) { // 跳过已经退出的人
continue;
}
count++;
if (count == 3) {
num[i] = 0; // 退出圈子
count = 0;
}
}
// 找到最后留下的人
for (i = 0; i < n; i++) {
if (num[i] != 0) {
left = num[i];
break;
}
}
printf("最后留下的是原来的第%d号的那位。\n", left);
return 0;
}
```
该程序中,我们使用数组 `num` 模拟围成一圈的人,`num[i]` 表示编号为 `i+1` 的人是否在圈子中,如果退出圈子,则将 `num[i]` 置为 0。
程序通过两次遍历 `num` 数组,第一次遍历时按照规则报数,第二次遍历时找到最后留下的人的编号。
阅读全文