題目鏈接:
And Then There Was One
題目解析:
約瑟夫問題的變種,把第一個刪除的數從1改爲m。
如果是0~n-1,從0開始刪除,有結論
F(1)=0;
F(n)=(F(n-1)+k)%n;
本題是從m開始,故答案爲 (m-k+1+F[n])%n
AC代碼:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<cmath>
#include<vector>
using namespace std;
#define ll long long
int f[10010];
int main()
{
int n,k,m;
while(scanf("%d%d%d",&n,&k,&m)!=EOF && n)
{
f[1]=0;
for(int i=2;i<=n;i++) f[i]=(f[i-1]+k)%i;
int ans=(m-k+1+f[n])%n;
if(ans<=0) ans+=n;
cout<<ans<<endl;
}
return 0;
}