约瑟夫环(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",如果剩下的最后 ...
随机推荐
- Mysql:The table‘xxxx’is full
下午跑程序,在插入mysql时突然报错: "The table'xxxx'is full" 而之前一直没问题的. 上网查了一下,都说临时表的问题,需要设置"tmp_tab ...
- MATLAB 图像处理——Contrast Enhancement Techniques
Contrast Enhancement Techniques %调整图片尺寸imresizeimages{k} = imresize(images{k},[width*dim(1)/dim(2) w ...
- ConvertFrom-String 命令研究
-------先上个例子------- $aaa = @'0.027 0.034 0.834 0.1050.346 0.558 0.018 0.0780.001 0.997 0.001 0.0010. ...
- candence 知识积累2
1 Allegro Symbol的类型以及作用: (1)Package Symbol : PCB里的封装符号,元器件的footprint,用来做元器件的封装,后缀(.psm),主要在电器层Etch ( ...
- Http协议访问DataSnap Rest 服务器
用TIDHttp访问DataSnap Rest服务器,在服务器采用了用户验证的情况下,客户端需要注意下面的细节,否则不能正常连接. 假如服务器有如下的用户验证: procedure TSC.DSAut ...
- 记录一些容易忘记的属性 -- UINavigationController
//设置导航栏的风格 self.navigationController.navigationBar.barStyle = UIBarStyleDefault; //设置导航栏是否透明 N ...
- Get IP Address in Android 4.0+
在android2.3以下的系统中,可以使用如下的代码来获取Android系统的本地IP地址: [java] private String getLocalIPAddress() throws So ...
- jQueryMobile控件之展开与合并
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JDBC中的PreparedStatement
PreparedStatement类从Statement中继承来. 可以将SQL语句传给数据库做编译处理,即在执行的SQL语句中包含一个或多个IN参数,可以设置IN参数值多次执行SQL语句,不必重新给 ...
- BFC and Haslayout
一.BFC(Block Formatting Context) 相关网址:http://www.cnblogs.com/dolphinX/p/3508869.html 1. 怎样才能形成BFC flo ...