题目:0, 1, … , n-1 这 n 个数字排成一个圈圈,从数字 0 开始每次从圆圏里删除第 m 个数字。求出这个圈圈里剩下的最后一个数字。
递推公式:
f(n,m)表示n个数,每次以步长为m删除,最后剩下的数。可以根据 f(n-1, m)递推求出。
#include <iostream>
using namespace std;
int LastRemaining_Solution(int n, int m)
{
if (n <1 || m <1)
return -1;
int last = 0;
for (int i = 2; i <= n; i++)
last = (last + m) % i;
return last;
}
int main() {
int n, m;
cin >> n >> m;
cout<<LastRemaining_Solution(n, m)<<endl;
return 0;
}