约瑟夫环问题:n个人围成一圈,第一个人从1开始报数,每次报到M的人出列,然后从1开始重新报数,求最后一个出列的人。
int yidong(int *p, int n,int k)
{
int i = 0, js = 0, count=0;
for (i = 0;i<n+1; i++)
{
if (*(p + i) != 0) //不等于0的时候再统计
{
if (js == k) //如果等于那个指定数字删除
{
*(p + i) = 0;
js = 0;
count++; //统计出圈的人数
}
js++;
}
if (i == (n - 1)) //一圈结束从头开始
{
i = 0;
}
if (n - count == 1) //只剩下一个人的时候出圈
{
break;
}
}
return i+1;
}