约瑟夫问题的实现
算法题目
n个人围成一个圈,每个人分别标注为1、2、…、n,要求从1号从1开始报数,报到k的人出圈,接着下一个人又从1开始报数,如此循环,直到只剩最后一个人时,该人即为胜利者。例如当n=10,k=4时,依次出列的人分别为4、8、2、7、3、10,9、1、6、5,则5号位置的人为胜利者。给定n个人,请你编程计算出最后胜利者标号数。(要求用单循环链表完成。)
输入
1 | 第一行为人数n; |
输出
1 | 输出最后胜利者的标号数。 |
样例输入
1 | 10 |
样例输出
1 | 5 |
算法分析
由于是约瑟夫问题,这是一个超经典的一个题目,其中以前试过用数组做,不过好像要模拟其中的过程,所以其中的思维必须要清晰,而约瑟夫问题用单循环链表来做,逻辑会变得非常的简单,写下这篇博客,也是想记录链表的创建与删除,在约瑟夫问题上,链表真的起到了很大的作用。
算法代码
1 | #include"iostream" |