假设有编号为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 <stdio.h>
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;
}