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

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-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
06-10 23:36
已编辑
首都经济贸易大学 C++
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-16 18:03
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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