约瑟夫经典问题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;
}


相关文章
|
19小时前
|
存储 算法 搜索推荐
C++|STL简介-string-vector基础运用
C++|STL简介-string-vector基础运用
|
2天前
|
设计模式 算法 C++
【C++】STL之迭代器介绍、原理、失效
【C++】STL之迭代器介绍、原理、失效
13 2
|
2天前
|
存储 C++ 容器
C++:STL - set & map
C++:STL - set & map
15 4
|
2天前
|
设计模式 算法 编译器
【C++】开始使用stack 与 queue
队列的相关习题大部分是子啊BFS中使用,这里就不在说明了
13 3
|
2天前
|
调度 C++ 容器
【C++】手搓 list 容器
本文我们实现了STL库中重要的list 的模拟实现,其中最重要莫过于迭代器的封装类的书写,这是前所未有的操作(对于我来说,我是第一次使用这种结构)。通过list 的模拟实现也帮我们巩固了类与对象的知识,也强化了指针操作的思路。欢迎大家讨论分析。
13 1
|
2天前
|
算法 安全 程序员
【C++】STL学习之旅——初识STL,认识string类
现在我正式开始学习STL,这让我期待好久了,一想到不用手撕链表,手搓堆栈,心里非常爽
16 0
|
2天前
|
存储 Serverless C++
【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]
【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]
10 1
|
2天前
|
存储 设计模式 算法
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
14 1
|
2天前
|
存储 编译器 C++
【C++/STL】list(常见接口、模拟实现、反向迭代器、)
【C++/STL】list(常见接口、模拟实现、反向迭代器、)
5 0
|
2天前
|
算法 C++ 容器
【C++/STL】vector(常见接口、模拟实现、迭代器失效)
【C++/STL】vector(常见接口、模拟实现、迭代器失效)
11 0

热门文章

最新文章