题目链接:
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;
}