题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.
#include <stdio.h>
void Josephus()
{
int n; //n个人
int i = 0; //i代表第i个人,从0开始
int k = 0; //k代表数的数,1,2,3
int flag[1000] = {0}; //是否退出的标志位
printf("请输入人数:\n");
scanf("%d",&n);
int person = n;
while(person != 1) //最后留一个人
{
if (flag[i] != 1) //标志为1就出局
{
k++;
if (3 == k) //报数为3
{
flag[i] = 1;
person--;
k = 0; //这里一定要置0
}
}
i++; //下一个人
if (i == n)
{
i = 0;
}
}
for (i = 0; i < n; i++)
{
if (0 == flag[i])
{
printf("最后留下的人是%d 号\n", i + 1); //i从0开始,这里要加一
}
}
}
int main()
{
Josephus();
return 0;
}
结果: