洛谷P1996 约瑟夫问题【队列】

摘要:
约瑟夫是个无聊的人!!!通过类比,直到所有人都出了圈,请依次输出出圈的人数输入/输出格式输入格式:nm输出格式:要圈出的圈数输入/输出示例输入示例#1:复制103输出示例#1:副本36927185104描述m,nle100m,n≤ 100想法。如果它重叠,它将被删除,这构成了一个队列循环。

题目背景

约瑟夫是一个无聊的人!!!

题目描述

n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.

输入输出格式

输入格式:

n m

输出格式:

出圈的编号

输入输出样例

输入样例#1: 复制

10 3

输出样例#1: 复制

3 6 9 2 7 1 8 5 10 4

说明

m, n le 100m,n≤100

思路:题目数据比较小,所以算是一道比较水的题了,就用了队列来写,主要是每次判断队列头位置的元素,将头元素插入到尾端再将头元素删除。如果叠加到了就删除,这样就构成了队列的循环。

#include<cstdio>
#include<queue>
#include <iostream>
using namespace std;
int main()
{
    int n,m,c=1;
    scanf("%d%d",&n,&m);
    queue<int> q;
    for(int i=1;i<=n;++i)
        q.push(i);
    while(!q.empty())
    {
        if(c==m)
        {
            printf("%d ",q.front());
            q.pop();
            c=1;
        }
        else
        {
            ++c;
            q.push(q.front());
            q.pop();
        }
    }
    printf("
");
    return 0;
}

免责声明:文章转载自《洛谷P1996 约瑟夫问题【队列】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Redis性能篇(二)CPU核和NUMA架构的影响SQLite安装 以及 SQLite header and source version mismatch错误解决 (In debian)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章