int mind01()
{vector<int> vec;int n, m;scanf("%d%d",&n,&m);//初始化for (int i=1;i<=n;i++){vec.push_back(i);}//开始游戏int vz = 0;while (vec.size() > 1)      //留下最后一个人{//约瑟夫环经典公式-->循环队列vz = (vz + m - 1) % vec.size(); //因为下表从0开始的,所以减一//淘汰的那个人cout << vec[vz] << endl;vec.erase(vec.begin()+vz);}//淘汰掉最后一个人cout << vec[0] << endl;return 0;
}

int mind02()
{queue<int> que;int n, m;int count_num = 1;    //计数scanf("%d%d",&n,&m);//初始化for (int i=1;i<=n;i++){que.push(i);}//开始游戏-->循环队列while (!que.empty())   //当队列不为空{if (count_num == m)   //有人要被淘汰掉了{cout << que.front() <<" ";que.pop();               //把被淘汰的人从队列中剔除出去count_num = 1;         //下一个人要重新从1开始}else //这个人不会被淘汰掉{count_num++;que.push(que.front());     //把队头的人当到队尾que.pop();}}return 0;
}
struct node
{int date;node *next;}*head , *tail;            //循环链表的头尾结点void initList(int len)
{//辅助指针node* s;//建立头节点head = new node;tail = head;head->next = NULL;//初始化-->尾插法for (int i=1;i<=len;i++){s = new node;s->date = i;tail->next = s;tail = s;}tail->next = head->next;     //循环链表
}void del_node(node * &cur,node * &pro)
{node *s = cur;pro->next = cur->next;cur = cur->next;delete s;s = NULL;
}int mind03()
{int n, m;int count_num = 1;       //计数node *cur = NULL;node *pro = NULL;scanf("%d%d",&n,&m);initList(n);cur = head->next;cur = head->next;pro = head;这里我们不妨先把头节点删掉while (pro->next != pro)           //只剩下最后一个人了{//cout << "aaaa" << endl;if (count_num == m)            //踢人咯{count_num = 1;cout << cur->date << " ";del_node(cur,pro);}else{count_num++;cur = cur->next;pro = pro->next;}}//if (pro != NULL){//cout << "aaaa" << endl;cout << pro->date << endl;delete pro;pro = NULL;cur = NULL;}if (head != NULL)delete head;return 0;
}

//线段树-->可以直接百度查找模板直接使用即可 O(lbn)
/*
线段树是一种二叉搜索树,与区间树相似,
它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。
对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],
右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。
使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。
而未优化的空间复杂度为2N,因此有时需要离散化让空间压缩。线段树至少支持下列操作:Insert(t,x):将包含在区间 int 的元素 x 插入到树t中;Delete(t,x):从线段树 t 中删除元素 x;Search(t,x):返回一个指向树 t 中元素 x 的指针。*/

约瑟夫环问题的几种解法相关推荐

  1. 约瑟夫环问题的两种解法(详解)

    约瑟夫环问题的两种解法(详解) 题目: Josephus有过的故事:39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓.于是决定了自杀方式,41个人排成一个圆 ...

  2. 这样给面试官解释约瑟夫环问题的几种巧妙解法,面试官满意的笑了

    转载请联系公众号:bigsai 前言 约瑟夫环问题是算法中相当经典的一个问题,其问题理解是相当容易的,并且问题描述有非常多的版本,并且约瑟夫环问题还有很多变形,这篇约瑟夫问题的讲解,一定可以带你理解通 ...

  3. —— 约瑟夫环(自杀环)的数学解法

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

  4. 约瑟夫环问题2(顺序表+链表求解)

    1.背景知识 * 古代判官要判决number个罪犯的死刑,制定了一条荒谬的法律 * 将犯人站成一个圈,从start开始数起,每数到第distance * 个就处决他,依照此规律直到最后剩下一个人赦免. ...

  5. 数据结构学习-循环链表:处理约瑟夫环问题

    目录 问题描述 一.基本概念 1.普通链表 2.单向循环链表 二.问题处理 1.创建链表 2.查找 3.删除 4.其他 三.实验环节 四.总结 问题描述 约瑟夫环问题的一种描述是:编号为1,2,... ...

  6. 约瑟夫环c语言单链表的解题思路,太透彻了:约瑟夫环的三种解法

    [CSDN 编者按]极大概率出现在面试中的约瑟夫环问题来啦,本文三种方法描述解题思路,这样讲解绝对让面试官眼前一亮. 作者 | bigsai 责编 | 欧阳姝黎 前言 约瑟夫环问题是算法中相当经典的一 ...

  7. 映射递归循环-约瑟夫环问题递归解法的一点理解

    先说明一点,如果有什么不对的地方,欢迎大家批评指正. 先来看这个类型的某个题目描述: 约瑟夫生者死者游戏 约瑟夫游戏的大意:30个游客同乘一条船,因为严重超载, 加上风浪大作,危险万分.因此船长告诉乘 ...

  8. 约瑟夫环解法大全(C语言版)

    前言: 约瑟夫环不愧是一道经典的算法题,原来也经常看到,但一直没有动手编码研究.最近又被同学提起这个问题,就研究了一下,发现这个问题可以挖掘的东西有很多,怪不得一直是面试的热门问题. 解法一,使用链表 ...

  9. 求约瑟夫环问题最后胜利者的一般解法以及数学推导方法

    问题描述: 约瑟夫环问题(Josephus) 用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出.写出C程序. 解法一: 思路:建立一个有N个元素的循环链表,然后从链表表头遍 ...

最新文章

  1. HDU 4467 分块
  2. 联想杜比音效_联想小新15 2020锐龙版开售
  3. python开发好学吗-Python是不是很难学?
  4. 自定义函数或者回调函数中调用对话框对象
  5. C#-获取磁盘,cpu,内存信息
  6. codevs 1004 四子连棋 BFS、hash判重
  7. java线程实例题_java线程相关试题实例源码代码
  8. mvcpager之学习
  9. REVERSE-PRACTICE-BUUCTF-24
  10. js 拉勾网效果_借助JShaman,建立自己的JS代码混淆平台
  11. 只有在配置文件或 Page 指令中将 enableSessionState”的异常解决办法
  12. 详解:物理地址,虚拟地址,内存管理,逻辑地址之间的关系
  13. php odbc驱动,php ODBC
  14. 如何查看或修改FANUC机器人的系统变量?
  15. AI 全自动玩斗地主,靠谱吗?Douzero算法教程
  16. 网页上的在线打印如何下载成本地PDF格式(人工亲测)
  17. 【软工】week3-个人阅读作业-软件案例分析
  18. OpenTCS 之 DefaultDispatcher 默认调度算法
  19. 微信支付提示:支付失败,如果已经扣款,资金会在0~3个工作日内原路退回
  20. python离线语音转文字

热门文章

  1. 【Matlab】如何使用Simulink进行电池建模和SOC预估
  2. linux清除僵尸进程,Linux 下僵尸进程的清理方法
  3. java不区分大小写查找字符串
  4. 能力态度必不可少,能力大于态度
  5. python点云拼接
  6. [iOS]上传图片和音视频到阿里云
  7. Firefox 48 beta和E10S发布
  8. 写给Python社群的第2课:Python逻辑语句,天天要写的 if 和 while
  9. 使用opencv直接打开云钥GigE网络工业相机
  10. 新版10澳元纸币下月起正式推出!