Josephus问题的queue解法
问题描述
Josephus问题是一个非常古老的问题。它的范型描述为N个人(0到N-1)围成一圈报数,报道M的人会被剔除,直到最后一个人。
要求找出最后一个人的位置或这N个人被剔除的顺序。
解决思路
我们可以用一个队列来表示N个人,然后循环出队。注意,此时的出队只是一种“伪出队”,只有轮到M位的数才真正出队,其他伪出队的数在队尾重新入队。以此来模拟问题的剔除方式。每次真出队的数组成的序列就是出队顺序,序列的最后一个数为最后一个人的位置。
具体代码
#include<iostream>
#include<queue>
using namespace std;
int main() {
	unsigned N, M;
	cin >> N >> M;
	queue<unsigned> all_of_people;
	for (unsigned i = 0; i < N; ++i) {
		all_of_people.push(i);
	}
	while (!all_of_people.empty()) {
		for (unsigned i = 0; i < M - 1; ++i) {
			all_of_people.push(all_of_people.front());
			all_of_people.pop();
		}
		cout << all_of_people.front() << ' ';
		all_of_people.pop();
	}
	return 0;
}
复杂度分析
因为是模拟剔除方式,每M次操作剔除一个元素,所以时间复杂度为M*N,所以元素只存在一个队列里,空间复杂度为O(N)。
Josephus问题的queue解法的更多相关文章
- Lowest Common Ancestor of a Binary Search Tree(Java  递归与非递归)
		题目描述: Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in ... 
- LeetCode 中级 -二叉树的层次遍历(102)
		题目描述: 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 ... 
- [LeetCode] 117. Populating Next Right Pointers in Each Node II 每个节点的右向指针 II
		Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ... 
- 线性表应用--Josephus问题的解法(Python 版)
		线性表应用 --Josephus问题的解法(Python 版) Josephus问题描述:假设有n个人围坐一圈,现在要求从第k个人开始报数,报到第m个数的人退出.然后从下一个人开始继续报数并按照相同的 ... 
- Josephus环的四种解法(约瑟夫环)
		约瑟夫环 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个 ... 
- 谁能笑到最后,约瑟夫环-Josephus问题求解
		一. 简述Josephus问题 N个人站成一环,从1号开始,用刀将环中后面一个人“消灭“”掉,之后再将刀递给下一个人,这样依次处理,最后留下一个幸存者. 二. 求解方法 1. 约瑟夫问题如果使用 ... 
- [LeetCode] Queue Reconstruction by Height 根据高度重建队列
		Suppose you have a random list of people standing in a queue. Each person is described by a pair of ... 
- [LeetCode] Implement Queue using Stacks 用栈来实现队列
		Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of ... 
- hdu4975 A simple Gaussian elimination problem.(正确解法 最大流+删边判环)(Updated 2014-10-16)
		这题标程是错的,网上很多题解也是错的. http://acm.hdu.edu.cn/showproblem.php?pid=4975 2014 Multi-University Training Co ... 
随机推荐
- 使用Docker快速搭建Nginx+PHP-FPM+MySQL+phpMyAdmin环境
			一.概述 环境介绍 操作系统:centos 7.6 docker版本:19.03.8 ip地址:192.168.31.34 本文将介绍如何使用单机部署Nginx+PHP-FPM环境 二.Nginx+P ... 
- Django-1.11中文文档-模型Models(一)
			官方文档链接 模型是数据信息的唯一并明确的来源.它包含了我们储存的数据的基本字段和行为.通常,每个模型映射到一张数据库表. 基本概念: 每个模型都是django.db.models.Model的一个子 ... 
- SpringCloud(一):微服务架构概述
			1-1. 系统进化理论概述 在系统架构与设计的实践中,经历了两个阶段,一个阶段是早些年常见的集中式系统,一个阶段是近年来流行的分布式系统: 集中式系统: 集中式系统也叫单体应用,就是把所有的程序.功 ... 
- 《从零开始TypeScript》系列 - 基础数据类型
			TypeScript 是 JavaScript 的超集,这里我们只讨论两者中的不同的部分,或者需要注意的部分 数组 Array:在TypeScript中,有两种方式来定义一个数组: 在元素类型后面接上 ... 
- Tomcat后台爆破指南
			0x00 实验环境 攻击机:Win 10 0x01 爆破指南 针对某Tomcat默认管理页面: (1)这里主要是介绍一种比较好用的burp爆破方法: 点击Tomcat后台管理链接 Tomc ... 
- golang——net/rpc包学习
			1.rpc包 rpc包提供了通过网络或其他I/O连接对一个对象的导出方法的访问. 只有满足如下标准的方法才能用于远程访问,其余方法会被忽略: (1)方法是导出的(2)方法有两个参数,都是导出类型或内建 ... 
- 死磕Spring之IoC篇 - Spring 应用上下文 ApplicationContext
			该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ... 
- Java流程控制:三种基本结构
			顺序结构: Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行顺序结构是最简单的算法结构语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的, ... 
- JMeter扩展Java请求实现WebRTC本地音视频推流压测脚本
			WebRTC是Web Real-Time Communication缩写,指网页即时通讯,是一个支持Web浏览器进行实时语音或视频对话的API,实现了基于网页的视频会议,比如声网的Agora Web ... 
- flutter资料
			Flutter社区和资源传送门 新: 慕课网<Flutter入门与案例实战> | 中文网<Flutter实战>电子书 字体图标生成 http://fluttericon ... 
