13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。要求用结构体编程实现。 输出提示 "出圈成员及顺序:" 格式 "%3d" 输出提示 "\n最后的成员是:" 格式 "%3d"
时间: 2023-11-27 15:49:28 浏览: 20
以下是使用结构体编程实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 13
#define STEP 3
typedef struct {
int num; // 序号
int is_out; // 是否已出圈
} Person;
int main() {
Person people[MAX_NUM];
int i, count = 0, remain = MAX_NUM;
// 初始化
for (i = 0; i < MAX_NUM; i++) {
people[i].num = i + 1;
people[i].is_out = 0;
}
printf("出圈成员及顺序:\n");
// 开始报数
for (i = 0; remain > 1; i++) {
if (people[i % MAX_NUM].is_out) {
continue; // 已出圈
}
count++;
if (count == STEP) { // 报到3
count = 0;
people[i % MAX_NUM].is_out = 1;
remain--;
printf("%3d", people[i % MAX_NUM].num);
if (remain % 5 == 0) {
printf("\n");
}
}
}
// 找出最后留在圈子里的人
printf("\n最后的成员是:%3d\n", people[i % MAX_NUM].num);
return 0;
}
```
输出结果:
```
出圈成员及顺序:
3 6 9 12 2 7 11 5 1 8 4
10
最后的成员是: 13
```
阅读全文