有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
#include <stdio.h>
#include <stdlib.h>
int findLastPerson(int n) {
int *people = (int *)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
people[i] = 1; // 1表示在圈内
}
int count = n, index = 0, number = 1;
while (count > 1) {
if (people[index] == 1) {
if (number == 3) {
people[index] = 0; // 报3退出圈子
count--;
number = 1;
} else {
number++;
}
}
index = (index + 1) % n;
}
for (int i = 0; i < n; i++) {
if (people[i] == 1) {
free(people);
return i + 1;
}
}
free(people);
return -1; // 不应该到达这里
}
int main() {
int n;
printf("Enter number of people: "