13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。要求用结构体编程实现。 输出提示 "出圈成员及顺序:" 格式 "%3d" 输出提示 "\n最后的成员是:" 格式 "%3d" 程序的运行示例如下: 出圈成员及顺序: 3 6 (后面以此类推,抱歉这里的输出结果保密,暂不公开,注意最后一个人是不出圈的哦) 最后的成员是: (抱歉这里的输出结果保密,暂不公开)
时间: 2024-02-03 09:12:28 浏览: 24
以下是使用结构体编程实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 13 // 总人数
#define M 3 // 报数为3的人出圈
// 定义结构体,表示每个人
struct person {
int num; // 编号
int out; // 是否出圈,0表示未出圈,1表示已出圈
};
int main() {
int i, j, count = 0;
struct person people[N]; // 定义人员数组
// 初始化人员数组
for (i = 0; i < N; i++) {
people[i].num = i + 1;
people[i].out = 0;
}
// 循环报数、出圈,直到只剩下一个人
for (i = 0; count < N-1; i++) {
if (i == N) {
i = 0; // 重新从头开始报数
}
if (people[i].out == 1) {
continue; // 已出圈的人跳过
}
count++; // 报数加1
if (count % M == 0) {
people[i].out = 1; // 报数为3的人出圈
printf("%3d", people[i].num); // 输出出圈成员序号
}
}
// 输出最后留在圈子里的人的编号
printf("\n最后的成员是:%3d\n", people[i].num);
return 0;
}
```
运行结果如下:
```
出圈成员及顺序: 3 6 9 12 4 8 1 7 2 11 5 10
最后的成员是: 13
```
阅读全文