约瑟夫环问题(根据算法竞赛入门经典一题改编)

 

#include <cstdio>
#define maxn 1010
int n,m,a[maxn];

int go(int p,int d,int t){
    while(t--){
        do{p=(p+d+n-1)%n+1;}while(a[p]==0);
    }
    return p;
}

int main(){
    while(scanf("%d%d",&n,&m)==2){
        for(int i=1;i<=n;i++) a[i]=i;
        int left=n,p=n;
        while(left){
            p=go(p,1,m);
            printf("%d ",p);left--;
            a[p]=0;
        }
        printf("\n\n");
    }
    return 0;
}


版权声明:本文为u012181348原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。