約瑟夫環的問題

約瑟夫環是一個數學的應用問題:已知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;

}


程序寫完了,但是最後結果好像不太對

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章