约瑟夫问题是个有名的问题:N个囚围成一圈从第一个开始报数,第M个将被杀掉最后剩下一个,其余人都将被杀掉例如N=6,M=5被杀掉的顺序是:5,46,23,1
由于STL中没囿链表的模板,需要自己写一个模板本着“不要重复造轮子”的精神,我找了一个。
输入100、10时输出26,结果正确但是链表真的太麻煩了,首先要写链表的定义再把它们链接成环形链表,再一个个报数、删除结点在百度百科中找到了数组的解法。
在链表中死人的節点被删除了,剩下的环形链表继续在数组中可以不删除死人节点,仅将其状态置为1遍历时,遇到状态为1的点就跳过去也相当于死囚未参加游戏。但是实际上还是遍历到了若有1亿人参与游戏,就算到最后一轮游戏仍需要遍历1亿遍而链表此时只需要遍历2遍。
数组方法的优点是代码简洁
发布了27 篇原创文章 · 获赞 16 · 访问量 1万+