感觉写的代码比老师的简单且逻辑性强哈哈哈

int main() {
    int n,p,m;
    while (1){
        scanf("%d%d%d",&n,&p,&m);
        if (n==0&&p==0&&m==0){
            break;
        }
        else
        {
            queue<int> MyQ;
            //从编号p小孩开始,依次把孩子们作为一个队列排好队,比如五个小孩,从三号开始,数到6走一个,
            //此规则下,排好队之后,MyQ为 3 4 5 1 2
            for (int i = p; i <= n; ++i) {
                MyQ.push(i);
            }
            for (int i = 1; i < p; ++i) {
                MyQ.push(i);
            }
            //循环m-1次,每次循环让队首去队尾,m-1次后的队首元素即是要出队的元素,即要喊m的小孩子
            printf("The student's queue is :");
            while (!MyQ.empty()){
                int temp;
                for (int i = 1; i < m; ++i) {
                    temp = MyQ.front();//记录当前队首孩子编号
                    MyQ.pop();//喊完就走
                    MyQ.push(temp);//到队尾排队
                }
                printf("%d,",MyQ.front());//每循环m-1次,刚好此时队首孩子是应该淘汰的
                MyQ.pop();//淘汰队首孩子
            }
        }
    }

#约瑟夫问题##
全部评论

相关推荐

点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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