#include <stdio.h>
#include <stdlib.h>
int *init(int n) //数组初始化
{
int i;
int *people = (int *)malloc(n * sizeof(int));
if (people == NULL)
{
printf("malloc failed!\n");
exit(1);
}
for (i = 0; i < n; i++)
{
people[i] = i + 1;
}
return people;
}
void uninit(int *people) //释放申请的空间
{
free(people);
}
int josph(int *people, int n) //算法实现
{
int i = 0;
int total = 0;
int left = n;
while (left > 1)
{
if (people[i] != 0)
{
total++;
if (total == 3)
{
people[i] = 0;
total = 0;
left--;
}
}
i++;
i = i % n;
}
for (i = 0; i < n; i++)
{
if (people[i] != 0)
{
return people[i];
}
}
}
int main(int argc, char *argv[])
{
int *people;
int n;
int last;
if (argc < 2)
{
printf("usage:./a.out num\n");
exit(1);
}
n = atoi(argv[1]);
people = init(n);
last = josph(people, n);
printf("the survival is %d\n", last);
uninit(people);
return 0;
}