题解 | 约瑟夫环

约瑟夫环

https://www.nowcoder.com/practice/e417cfe32c74416ca38247f619ddb322

#include <stdio.h>
#include <stdlib.h>
int main() {
    int n,k,m;//k为编号,m为报数
    int cnt = 0;//cnt ? m
    scanf("%d %d %d",&n,&k,&m);
    int length = n;
    //终止条件 length=1 k = % n
    int *number = (int*)malloc(sizeof(int)*n);
    int i;
    for(i=0;i < n;i++){
        number[i] = i;
    }//给队列赋予初值
    for(i = k;;i = (i+1)%n){
        if(length == 1) break;
        if(number[i] != -1 ) cnt++;
        if(cnt == m){//需要人出列
            number[i] = -1;
            length = length - 1;
            cnt = cnt - m;
        }
    }
    for(i = 0;i < n;i++){
        if(number[i]!=-1)
            printf("%d",number[i]);
    }
    return 0;
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务