美文网首页
用循环数组解决约瑟夫环问题

用循环数组解决约瑟夫环问题

作者: cursorkey | 来源:发表于2021-05-07 22:59 被阅读0次

    N个人围成一圈顺序编号,从1号开始按1、2、3…顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推,按退出顺序输出每个退出人的原序号。

    #define M 100    // M > N
    void Joseph(int N, int p) {
        int queue[M];
        int head, tail, i;
        for (i = 1; i <= N; i++) {
            queue[i] = i;
        }
        head = 1;
        tail = N;
        i = 1;
        while (head != tail) {
            if (i != p) {
                tail = ++tail % M;
                queue[tail] = queue[head];
            }
            else {
                printf("%d ", queue[head]);
                i = 0;
            }
            i++;
            head = ++head % M;
        }
        printf("%d\n", queue[head]);
    }
    

    相关文章

      网友评论

          本文标题:用循环数组解决约瑟夫环问题

          本文链接:https://www.haomeiwen.com/subject/lkxldltx.html