题目:有N个人,从1到N编号,按照编号顺序围成一圈。从第一个人开始报数(从1报到3),凡报到3的人退出圈子。
问:最后留下的人的编号是几号。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num;
int *array = NULL;
printf("请输入围成圈的人数:");
scanf("%d",&num);
array = (int *)calloc(num,sizeof(int));
int i = 0,out_n = 0,call_n = 0,count = 0; //i和count要分辨清楚
while (1)
{
if (array[i] == 0)
{
if (out_n == (num - 1))
{
break;
}
call_n++;//序号永远比索引号大1
call_n %= 3;
if (call_n == 0)
{
array[i] = 1;
out_n++;
}
}
i++;
i %= num;
}
printf("最后的那个人是:%d\n",i + 1);
return 0;
}