约瑟夫环-(数组、循环链表、数学)
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
约瑟夫环运作如下:
1、一群人围在一起坐成环状(如:N)
2、从某个编号开始报数(如:S)
3、数到某个数(如:M)的时候,此人出列,下一个人重新报数
4、一直循环,直到所有人出列 ,约瑟夫环结束
模拟过程,求出最后的人。
把数组看成一个环,从第s个元素开始按m-1间隔删除元素,重复过程,直到元素全部去掉。
void Josephus(int a[],int n,int m,int s)
{int i,j;int k=n;for(i=0;i<n;i++)a[i]=i+1;//编号i=(s+n-1)%n;while(k){for(j=1;j<m;j++)i=(i+1)%k;//依次报数,头尾相连printf("%d\n",a[i]);//出局for(j=i+1;j<k;j++)a[j-1]=a[j];//删除本节点k--;}//模拟结束,最后输出的就是留下的人
}
可以用带头单循环链表来求解:
也是一样的,只是实现不同,给出核心代码:
while(k){for(j=1;j<m;j++){pr=p;p=p->link;if(p==head)//头结点跳过{pr=p;p=p->link;}}k--;//打印pr->link=p->link;//删结点free(p);p=pr->link;//从下一个继续}
双向循环链表也可以解,和单链表类似,只是不需要保持前趋指针。
数学可解:
效率最高
int check_last_del(int n,int m)
{int i = 1;int ret = 0;for (i = 2; i<=n;i++)ret = (ret + m) %i;return ret+1;//因为ret是从0到n-1,最后别忘了加1。
}
约瑟夫环-(数组、循环链表、数学)相关推荐
- 约瑟夫环之循环链表实现
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开 始报数,数到m的那个人又出列:依此规律 ...
- 约瑟夫环问题(数学方法)
问题描述: 约瑟夫环问题(Josephus) 用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出.写出C程序. 解法一: 思路:建立一个有N个元素的循环链表,然后从链表表头遍 ...
- C语言解决经典问题约瑟夫环--数组
什么时约瑟夫环问题? 约瑟夫问题,是一个计算机科学和数学中的问题,在计算机编程的算法中,类似问题又称为约瑟夫环,又称"丢手绢问题". 问题的大致内容就是:一共有N个人,从1开始报数 ...
- 约瑟夫环 单向循环链表实现
约瑟夫环 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直到圆桌周围 ...
- python约瑟夫环单向循环链表_约瑟夫环的单向循环链表的实现代码
/************************************************************************* > File Name: JosephCir ...
- 约瑟夫环问题(数学递推法)
约瑟夫环问题起源于一个犹太故事: 罗马人攻占了桥塔帕特,41个人藏在一个山洞中躲过了这场浩劫.这41个人中,包括历史学家Josephus(约瑟夫)和他的一个朋友.剩余的39个人为了表示不向罗马人屈服, ...
- 约瑟夫环(循环链表)
约瑟夫环 约瑟夫环问题的描述是:编号为1,2,-,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数上限m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停 ...
- Java 约瑟夫环(循环链表解决)
问题描述:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉.例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1. 解题思路:因为是围成一圈,所以用循环链表是最符 ...
- java约瑟夫环 循环链表_约瑟夫环_循环链表JAVA解答
编写测试案例 public class Cicle { @Test public void test() { LinkedList linkedList = new LinkedList(); lin ...
最新文章
- Matlab与线性代数 -- 矩阵的秩
- 世界人工智能创新大赛来了!
- 中国AI创新者论坛将于3月21日在清华大学举办
- V4L2框架分析学习二
- 微软的.NET Core开始支持Raspberry Pi 3
- 二维数组排序 行与列分别升序_6个经典排序技巧,尤其是最后一个,绝对的个性化...
- cookie记录了服务器相关的信息,使用cookie记录信息(精选).ppt
- disk磁盘管理与Linux驱动编写
- L2-026 小字辈-PAT团体程序设计天梯赛GPLT
- 力扣——合并两个有序链表
- [CareerCup] 17.1 Swap Number In Place 互换位置
- 无效镜像问题image has dependent child images
- Visual Studio 报错:未能加载工具箱项,将从项目中移除
- (转)转给入职新人得体会
- android用户中心头像选择功能的方法实现
- 一文教你用 Neo4j 快速构建明星关系图谱
- VGA显示器字符显示
- 阿里云域名证书免费认证教程
- 霍兰德职业规划测试软件,发现你的职业兴趣——霍兰德职业兴趣测试
- 互联网公司招聘--奇虎360--技术类--2013年笔试题
热门文章
- UWidgetBlueprintLibrary
- Linux Kbuild文档 3
- 中国的程序员为什么这么辛苦?
- WinCE6下的kernelIoControl使用方法
- activexobject对象不能创建_Oracle数据库用户管理之系统权限和对象权限
- 【转】wpf从我炫系列2----布局控件的使用(下)
- 【转】C#开发笔记之05-迭代器中的状态机(State Machine)到底是什么?
- 第六节:深入研究Task实例方法ContinueWith的参数TaskContinuationOptions
- sharepoint的文件是怎样存放的及存放的表是哪个
- MOSS/Sharepoint RBS概念以及运用