题目:
输入一个数字n,将0,1,2,3,4..n-1围成一个圆。从数字0开始每次删除第m个数字,求最后剩下的数字。
解法:
约瑟夫环问题。f(n,m) = [f(n-1,m)+m] % n; f(n,m)实际表示每一轮中,最终存活的数字在每一轮中的编号。
代码:
int LastRemaining_Solution(int n, int m)
{
if(n<1||m<1)
return -1;
if(n==1)
return 0;
return (LastRemaining_Solution(n-1,m)+m)%n;
}