题目来源:蓝桥杯2018年国赛题https://www.lanqiao.cn/problems/231/learning/
题目内容:
n 个人的编号是 1~n,如果他们依编号按顺时针排成一个圆圈,从编号是 1 的人开始顺时针报数。
(报数是从 1 报起)当报到 k 的时候,这个人就退出游戏圈。下一个人重新从 1 开始报数。
求最后剩下的人的编号。这就是著名的约瑟夫环问题。
input:
输入是一行,2 个空格分开的整数n, k(0 < n,k < 10^7);
例如:
10 3
output:
要求输出一个整数,表示最后剩下的人的编号。
例如:
4
本题目就是已知 n,k 的情况下,求最后剩下的人的编号。
1.本来很顺利地想用循环链表来计算的
但是,参考其他的博主发现,使用链表的时间复杂度很高(O(kn))。
2.于是发现(n-1)个人报数的情况即为n个人报数后,报数为k的人退出后出现的情况,判断其中有递归关系。