约瑟夫经典问题C++,STL容器queue解法

简介: 约瑟夫经典问题C++,STL容器queue解法

题目:

       

Description

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

注意:本题和《深入浅出-基础篇》上例题的表述稍有不同。书上表述是给出淘汰 n−1 名小朋友,而该题是全部出圈。

Input

输入两个整数 n,m

Output

输出一行n 个整数,按顺序输出每个出圈人的编号。

Sample 1

Inputcopy

Outputcopy

10 3

3 6 9 2 7 1 8 5 10 4

Hint

≤1001≤m,n≤100

解题思路:

用STL容器的,queue队列来写:

       一个一个的报数,可以想象成一个队列,一个人报完数后,判断他所报的数是不是出局的数,如果是,直接弹出,但若不是,将其移动至队尾。我们使用一个队列之前,需要加上头文件<queue>

代码如下:

#include<bits/stdc++.h>
#include<queue>
using namespace std;
int main()
{
  int n, m, nowNum = 1;
  cin >> n >> m;
  queue<int> q;
  for(int i = 1; i < n; i++) q.push(i); //初始化队列
  while(!q.empty())       //在队列不为空时继续
  {
    if(nowNum == m)
    {
      cout << q.front << " "; //打印出局的人的编号
      q.pop();        //出局
      nowNum = 1;     //初始化现在的数字
    }
    else
    {
      nowNum++;
      q.push(q.front());  //排至队尾
      q.pop();
    }
  }
  cout << endl;
  return 0;
}


相关文章
|
1月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
95 10
|
1月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
69 5
|
1月前
|
存储 算法 调度
【C++打怪之路Lv11】-- stack、queue和优先级队列
【C++打怪之路Lv11】-- stack、queue和优先级队列
33 1
|
1月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
52 1
|
1月前
|
设计模式 存储 C++
C++之stack 和 queue(下)
C++之stack 和 queue(下)
35 1
|
1月前
|
算法 安全 Linux
【C++STL简介】——我与C++的不解之缘(八)
【C++STL简介】——我与C++的不解之缘(八)
|
1月前
|
算法 数据处理 C++
c++ STL划分算法;partition()、partition_copy()、stable_partition()、partition_point()详解
这些算法是C++ STL中处理和组织数据的强大工具,能够高效地实现复杂的数据处理逻辑。理解它们的差异和应用场景,将有助于编写更加高效和清晰的C++代码。
23 0
|
1月前
|
C++ 容器
C++之stack 和 queue(上)
C++之stack 和 queue(上)
56 0
|
1月前
|
存储 C++ 容器
C++番外篇——stack、queue的实现及deque的介绍
C++番外篇——stack、queue的实现及deque的介绍
25 0
|
1月前
|
存储 算法 C++
C++入门10——stack与queue的使用
C++入门10——stack与queue的使用
42 0
下一篇
无影云桌面