#define M 13//M为总人数
#define N 3 //N为循环单元
int a[M] = {0}, count = 0, people = M;//count计数(0-3), people为当前人数
printf("原序列:\n");
for (int i = 1; i <= M; i++) {
a[i - 1] = i;
printf("%d ", a[i - 1]);
}//赋值
printf("\n开始排除...\n");
while (people > 1) {//当前人数大于一时,继续进入循环进行排除
for (int p = 0; p < M; p++) {//排除的趟数循环
if (a[p] != 0) {
count++;
}//如果当前数不为0,则count加1,直到count为3
if (count == N) {
printf("%d被排除\n排除后的序列为:\n", a[p]);//排除当前数
a[p] = 0;//当前数标记为0,说明已被排除
for (int i = 0; i < M; i++) {
printf("%d ", a[i]);
}//打印本趟排除后的序列结果
printf("\n");
count = 0;//重新计数
people--;//当前人数减1
}
}
}
for (int i = 0; i < M; i++) {
if (a[i] != 0) {
printf("%d是叛徒\n", a[i]);
}//遍历序列,若不为0则为叛徒
}