WOJ1173-Josephus Permutation

假设有编号为1-n的n个人按编号由小到大顺时针围成一个圆圈,现在给定一个m。由一号开始,我们数m个人,然后将此人移出圆圈,然后又数m个人,再将此人移出??不断做下去,最后n个人都移出了圆圈。这样我们就得到了(n, m)-Josephus Permutation。
例如:(7, 3)-Josephus Permutation为< 3, 6, 2, 7, 5, 1, 4 >

输入格式

每行为一个测试数据,一个测试数据为两个正整数,即上面的n和m。n = m = 0时,程序结束。1 <= n <= 2000,0 < m < 2^31。

输出格式

对于每个测试,输出Josephus Permutation的最后一个数字,也即输出最后一个移出圆圈的人的编号。

样例输入

7 3
0 0

样例输出

4


#include 
int res(int n,int m){
    int a=0,i;
    for(i=2;i<=n;i++){
        a=(a+m)%i;
    }
    return ++a; 
}
int main(){
    int m,n;
    while(scanf("%d %d",&n,&m)==2&&n!=0&&m!=0){
        printf("%d\n",res(n,m));    
	}
    return 0;
}


你可能感兴趣的:(WOJ)