令f[i]表示i个人玩游戏报m退出,最后胜利者的编号,最后的答案是f[n]。
f[i-1] 的序号0在f[i]中为(0+m)%i
f[i-1]的序号1在f[i]中为(1+m)%i
...
知道答案在f[i-1]的序号,则能知道f[i]中的答案序号
以此类推,我们知道f[1]中的答案序号,则能推出f[n]中的答案序号
#include<iostream>
using namespace std;
int main()
{
int n,m;
cin>>n;
cin>>m;
int result=0;//f[1]=0
for (int i=2;i<=n;i++)
{
result=(result+m)%i;
}
cout<<result<<endl;//若0~n-1表示n个人则为result,若1~n表示n个人则为result+1
return 0;
}