您的位置:首页 > 编程语言 > C语言/C++

约瑟夫环的问题

2015-10-23 21:39 316 查看
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时把编号从0~n-1,最后结果+1即为原问题的解。
原理:
1、一群人围在一起坐成环状(如:N)
2、从某个编号开始报数(如:K)
3、数到某个数(如:M)的时候,此人出列,
4、一直循环,直到所有人出列,


pLinkNode JosephusCycle(pLinkNode Head, int k)
{
pLinkNode begin = Head;
pLinkNode del;
assert(Head);
while (1)
{
if (begin->_next == Head)
return begin;
int count = k - 1; //走的步数
while (count--)
{
begin = begin->_next;
}

del = begin->_next;
printf("%d ", begin->_data);
begin->_data = begin->_next->_data;
begin->_next = begin->_next->_next;
free(del);
}
assert(begin->_data == 1); //判断是否剩一个
return begin;
}

程序写完了,但是最后结果好像不太对
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c/c++