约瑟夫环(Josehpuse)的模拟
约瑟夫环问题:
0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字,求出这个圆圈里剩下的最后一个数字。
这里给出以下几种解法,
1.用队列模拟
每次将前m-1个元素出队,出队元素放入队列的末尾,再循环即可,这种方法时间复杂度为O(mn)(每找出一个数字需要m步运算,要找出n人数字),空间复杂度为O(n),用于存放队列,运行结果如下。
2.环形链表模
时间复杂度为O(mn),空间复杂度为O(n)
代码如下(vs2015调试正常):
//Josephuse环问题
#include <iostream>
#include <cstdlib>
#include <queue>
#include <vector>
#include <list> using namespace std; //用队列模拟
void Q_Joes(int n, int m)
{
queue<int> Q;
vector<int> result;
for (int i = ; i < n; i++) {
Q.push(i);
}
int count = m;
while (!Q.empty()) {
while (--count) {
Q.push(Q.front());
Q.pop();
}
result.push_back(Q.front());
Q.pop();
count = m;
}
for (auto i : result)
cout << i << " ";
cout << endl;
cout << result[result.size() - ];
cout << endl;
} //用循环链表来模拟,当单链表迭代器到末尾时,将其移到链表的开头,以此来模拟一个环形链表
void List_Joes(int n, int m)
{
if (n < || m < )
return;
list<int> L;
vector<int> result;
int i;
for (i = ; i < n; ++i)
L.push_back(i);
list<int>::iterator curNode = L.begin();
while (L.size() > ) {
//找到第m个数字
for (int i = ; i < m; ++i) {
curNode++;
if (curNode == L.end())
curNode = L.begin();
} auto next = ++curNode;
if (next == L.end())
next = L.begin();
--curNode;
result.push_back(*curNode);
L.erase(curNode);
curNode = next; }
for (auto i : result)
cout << i << " ";
cout << endl;
cout << result[result.size() - ];
cout << endl;
} int main()
{
int n, m;
cin >> n >> m;
Q_Joes(n, m);
List_Joes(n, m);
system("pause");
return ;
}
3.数学解法
当n为1时,最后剩下的数字为0
当n大于1时,f(n,m) = f'(n -1,m) = (f(n -1,m) + m) %n
#include <stdio.h>
#include <stdlib.h> int main()
{
int n, m,i,last;
scanf("%d%d", &n, &m);
last = ;
for (i = ; i <= n; i++)
last = (last + m) % i;
printf("%d\n", last);
system("pause");
return ;
}
约瑟夫环(Josehpuse)的模拟的更多相关文章
- Roman Roulette(约瑟夫环模拟)
Roman Roulette Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- hdu 4841 圆桌问题(用vector模拟约瑟夫环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4841 圆桌问题 Time Limit: 3000/1000 MS (Java/Others) M ...
- tc 147 2 PeopleCircle(再见约瑟夫环)
SRM 147 2 600PeopleCircle Problem Statement There are numMales males and numFemales females arranged ...
- 14.约瑟夫环问题[JosephusProblem]
[题目] n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字).当一个数字删除后,从被删除数字的下一个继续删除 ...
- Java学习之约瑟夫环的两中处理方法
package day_2; import java.util.Scanner; /** * @author Administrator * 约瑟夫环问题: 设编号为 1,2,3,....n的N个人围 ...
- 约瑟夫环问题及python与c++实现效率对比
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重 ...
- UVA 305 Joseph (约瑟夫环 打表)
Joseph The Joseph's problem is notoriously known. For those who are not familiar with the original ...
- 【剑指offer】约瑟夫环问题
转载请注明出处:http://blog.csdn.net/ns_code/article/details/27957407 题目描写叙述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小 ...
- POJ 2359 Questions(约瑟夫环——数学解法)
题目链接: http://poj.org/problem?id=2359 题意描述: 输入一个字符串 按照下面的规则,如果剩下的最后一个字符是'?',输出"Yes",如果剩下的最后 ...
随机推荐
- 【html5】常见标签使用说明(持续更新)
说明: 所谓常见,是指我在优秀网页源码中见到的. 1.viewport 我见到的时候是这样: <meta name="viewport" content="widt ...
- 怎么改变 placeholder字体颜色
::-webkit-input-placeholder{color: #888}::-moz-placeholder{color: #888}:-moz-placeholder{color: #888 ...
- flash透明效果代码分享~~~
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://down ...
- Android 之 log
android.util.Log常用方法: Log.v() VERBOSE 任何消息都会输出 Log.d() DEBUG 仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DD ...
- 【BZOJ】2719 银河之星
可以将棋子分为9种类型.且可以通过合并使得两个不同种类棋子转换为另一种棋子(不过要注意棋盘大小,有的时候硬要合并会到棋盘外面,可以先把棋盘全部转换,然后枚举每一个棋子的转换).然后把状态压成一个十位的 ...
- asp.net还原备份数据库(C#)
因为做项目的时候用到对数据库的还原和备份,第一次接触,所以上网查了关于这方面的资料,网络果然是个好东西,该有的都有了,这里我就把原文中的代码直接粘贴过来了. using System; using S ...
- cocos2d-x 系列文章介绍
学习 cocos2d-x 一年多,从3.0bata 到 现在的 3.6 ,从最早没什么教程到现在官网繁多的资料教程, cocos2d-x 的变化实在是大.刚开始学习 cocos2d-x 是到处找资 ...
- 将excel2003文档文件转换为excel2007格式
在sharepoint 2010 中,excel2007或excel 2010文档格式,支持web app 应用,能够在浏览器在线打开,查看,但excel 2003格式的文档只能用office客户端打 ...
- url编码 中文在url参数中传递,在请求头,响应头中传递,是如何编码的呢?
一定要编码成url的吗?还是url自动把接受的汉字编码,请求头响应头到达之后再自动编码成汉字?这样似乎比较合理哦 先把iso8859-1 转换成 utf-8,在mvc中处理,然后响应的时候在转成iso ...
- C++异常处理的问题
一般在C语言中,是通过返回值或者设置errno的方式来标识错误的 但在C++里面,构造函数是没有返回值的,于是发明了异常的方式:为了正确的向使用者表明 异常抛出的原因,你必须弄清楚异常抛出的原因(比如 ...