问题描述:n个人围成一圈报数,报到3的人退出,一直循环直到最后一退出的人,输出最后一个退出的人的编号
这个题需要注意的点是:
1.标记数组
2循环结束的条件
3.环形处理
int Josephproblem(int n)
{
int* a = (int*)malloc(n * sizeof(int));//标记(谁在、谁退出)
int i;
for (i = 0; i < n; ++i)
{
a[i] = 1;//还在圈内的人标记为1,一开始所有人都在圈内
}
int count=0;//报数器
int k = n;//当前还在的人数
i = 0;
while (k >1)
{
if (a[i] == 1)
{
count++;
if (count % 3 == 0)
{
a[i] = 0;//退圈
k--;
}
}
i = (i + 1) % n;//环形处理
}
for (i = 0; i < n; ++i)
{
if (a[i] == 1)
break;
}
free(a);
return i+1;
}