约瑟夫环问题:

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)的模拟的更多相关文章

  1. Roman Roulette(约瑟夫环模拟)

    Roman Roulette Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  2. hdu 4841 圆桌问题(用vector模拟约瑟夫环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4841 圆桌问题 Time Limit: 3000/1000 MS (Java/Others)    M ...

  3. tc 147 2 PeopleCircle(再见约瑟夫环)

    SRM 147 2 600PeopleCircle Problem Statement There are numMales males and numFemales females arranged ...

  4. 14.约瑟夫环问题[JosephusProblem]

    [题目] n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字).当一个数字删除后,从被删除数字的下一个继续删除 ...

  5. Java学习之约瑟夫环的两中处理方法

    package day_2; import java.util.Scanner; /** * @author Administrator * 约瑟夫环问题: 设编号为 1,2,3,....n的N个人围 ...

  6. 约瑟夫环问题及python与c++实现效率对比

    约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重 ...

  7. UVA 305 Joseph (约瑟夫环 打表)

     Joseph  The Joseph's problem is notoriously known. For those who are not familiar with the original ...

  8. 【剑指offer】约瑟夫环问题

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27957407 题目描写叙述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小 ...

  9. POJ 2359 Questions(约瑟夫环——数学解法)

    题目链接: http://poj.org/problem?id=2359 题意描述: 输入一个字符串 按照下面的规则,如果剩下的最后一个字符是'?',输出"Yes",如果剩下的最后 ...

随机推荐

  1. Mysql:The table‘xxxx’is full

    下午跑程序,在插入mysql时突然报错: "The table'xxxx'is full" 而之前一直没问题的. 上网查了一下,都说临时表的问题,需要设置"tmp_tab ...

  2. MATLAB 图像处理——Contrast Enhancement Techniques

    Contrast Enhancement Techniques %调整图片尺寸imresizeimages{k} = imresize(images{k},[width*dim(1)/dim(2) w ...

  3. 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. ...

  4. candence 知识积累2

    1 Allegro Symbol的类型以及作用: (1)Package Symbol : PCB里的封装符号,元器件的footprint,用来做元器件的封装,后缀(.psm),主要在电器层Etch ( ...

  5. Http协议访问DataSnap Rest 服务器

    用TIDHttp访问DataSnap Rest服务器,在服务器采用了用户验证的情况下,客户端需要注意下面的细节,否则不能正常连接. 假如服务器有如下的用户验证: procedure TSC.DSAut ...

  6. 记录一些容易忘记的属性 -- UINavigationController

    //设置导航栏的风格    self.navigationController.navigationBar.barStyle = UIBarStyleDefault;    //设置导航栏是否透明 N ...

  7. Get IP Address in Android 4.0+

    在android2.3以下的系统中,可以使用如下的代码来获取Android系统的本地IP地址: [java]  private String getLocalIPAddress() throws So ...

  8. jQueryMobile控件之展开与合并

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. JDBC中的PreparedStatement

    PreparedStatement类从Statement中继承来. 可以将SQL语句传给数据库做编译处理,即在执行的SQL语句中包含一个或多个IN参数,可以设置IN参数值多次执行SQL语句,不必重新给 ...

  10. BFC and Haslayout

    一.BFC(Block Formatting Context) 相关网址:http://www.cnblogs.com/dolphinX/p/3508869.html 1. 怎样才能形成BFC flo ...