首页 > 其他 > 详细

约瑟夫环的问题

时间:2015-10-24 06:46:04      阅读:220      评论:0      收藏:0      [点我收藏+]
约瑟夫环是一个数学的应用问题:已知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;

}


程序写完了,但是最后结果好像不太对

本文出自 “numow” 博客,请务必保留此出处http://10541695.blog.51cto.com/10531695/1705667

约瑟夫环的问题

原文:http://10541695.blog.51cto.com/10531695/1705667

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!