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<cstdio>
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
",Joseph(n,k,m));
	}
	return 0;
}
原文地址:https://www.cnblogs.com/WArobot/p/6836360.html