POJ 3517 And Then There Was One( 约瑟夫环模板 )


**链接:****传送门 **

题意:典型约瑟夫环问题

约瑟夫环模板题:n个人( 编号 1~n )在一个圆上,先去掉第m个人,然后从m+1开始报1,报到k的人退出,剩下的人继续从1开始报数,求最后剩的人编号


/*************************************************************************
> File Name: poj3517.cpp
> Author: WArobot
> Blog: http://www.cnblogs.com/WArobot/
> Created Time: 2017年05月10日 星期三 14时49分41秒
************************************************************************/

include

using namespace std;

int Joseph(int n,int k,int m){
int d , s = 0;
for(int i = 2 ; i<= n ; i++) s = ( s + k ) % i;
k %= n;
if( k == 0 ) k = n;
d = ( s + 1 ) + ( m - k );
if( d >= 1 && d <= n ) return d;
else if( d < 1 ) return d + n;
else if( d > n ) return d % n;
}
int main(){
int n,k,m;
while(~scanf("%d%d%d",&n,&k,&m) , n||k||m ){
printf("%d\n",Joseph(n,k,m));
}
return 0;
}

posted @ 2017-05-10 15:52  ojnQ  阅读(241)  评论(0)    收藏  举报