原文链接:https://blog.csdn.net/humanking7/article/details/80786920 ---- 算法问题 代码 测试结果 分析 ---- 算法问题 约瑟夫环(Josephus...int m); int alg3(int n, int m); int main() { //Initialization int n, m; char str[] = "Josephus
0 写在前面 josephus问题是数据结构教材中的一个常见实例,其问题可以描述为: 设nnn个人围坐一圈,现在要求从第kkk个人开始报数,报到第mmm个的人退出。...找到第kkk个人开始 运行 从kkk的位置开始数到mmm,中间遇到000的就跳过 数到mmm之后,将其值改为000 然后继续循环,总共循环nnn次(因为每次循环就会退出一个人) 代码如下: def josephus_A...代码实现如下: def josephus_L(n, k, m): people = list(range(1, (n+1))) i=k-1 for num in range(n,0,-1):..._rear: break p=p.next class LinkedListUnderflow(ValueError): # 自定义异常 pass class Josephus..._rear.next 到此这篇关于使用python从三个角度解决josephus问题的方法的文章就介绍到这了,更多相关python josephus问题内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持
由于我们把josephus问题分解成了josephus类和ring类,在主函数中,用户只需要使用josephus类设计其对象明确知道Josephus类的外部接口函数也就是操作该对象的方法initial(...{ Josephus a; a.initial(); cin.get(); cin.get(); } josephus.h class Josephus...{ public: Josephus(int num=10,int interval=1) { Josephus::num=num;...; return; } Josephus::num=num; Josephus::interval=interval; Ring...{ public: Josephus(int num=10,int interval=1) { Josephus::num=num;
raw=true] 思路 定义一个list key为josephus,利用 RPOPLPUSH josephus josephus 命令来构造循环链表,每当数到3时,使用rpop rpop josephus...", String.valueOf(i)); } int index = 1; while (listOperations.size("josephus...index = 0; } else { listOperations.rightPopAndLeftPush("josephus", "josephus..."); } index++; } } } 整个代码步骤如下 先是模拟有41个人(向redis中key为josephus的list添加...41个数据) 定义索引index 循环判断key为josephus的数据长度是否大于0 当索引index为3时,调用Redis的rpop命令弹出对应的数据。
弗拉维奥·约瑟夫斯(Josephus problem)是一世纪著名历史学家,他和他39个战友被罗马军队包围在洞中。...python实现方法: from pythonds3.basic.queue import Queue def who_is_josephus(namelist, num): man_queue...man_queue.dequeue()) print(man_queue.dequeue(), 'is dead') print(man_queue.dequeue(), 'is "Josephus..."') who_is_josephus(["Bill", "David", "Susan", "Jane", "Kent", "Brad"], 7) # Susan is "Josephus" 皮一下很开心
zs.nextInt(); //打印 System.out.print("输入剔除的序号:"); int n = zs.nextInt(); josephus...(m, n); } public static void josephus(int n, int m) { ArrayList arrayList =...zs.nextInt();// //打印 System.out.print("输入剔除的序号:"); int n = zs.nextInt(); josephus...(m, n); } //判断是否为约瑟夫数 public static void josephus(int m, int n) { //创建list集合存放人数的序号...i] + " "); } //打印 System.out.println(); } //判断约瑟夫数 public void josephus
思路 定义一个list key为josephus,利用 RPOPLPUSH josephus josephus 命令来构造循环链表,每当数到3时,使用rpop rpop josephus 命令弹出 代码实现...", String.valueOf(i)); } int index = 1; while (listOperations.size("josephus...index = 0; } else { listOperations.rightPopAndLeftPush("josephus", "josephus..."); } index++; } } } 整个代码步骤如下 先是模拟有41个人(向redis中key为josephus的list添加...41个数据) 定义索引index 循环判断key为josephus的数据长度是否大于0 当索引index为3时,调用Redis的rpop命令弹出对应的数据。
26.Algorithm Gossip: 约瑟夫问题(Josephus Problem) 说明 据说着名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus...然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
1.在本题的程序中,函数过程 Create_link_list(n)建立一个具有 n 个结点的环形链表;程序过程josephus(n,i,m)对由Create_link_list(n)所建立的具有n个结点的环形链表按一定的次序逐个输出并删除链表中的所有结点...例如,对于下图中具有 6 个结点的环形链表,在调用 josephus(6,3,2)后,将输出 5,1,3,6,4,2 请在横线处填上适当内容, ? 每空只填一个语句。...END; p^.data:=n; (C)___; END; Creat_link_list:=head END; PROCEDURE josephus
initList(n): list = [] for i in range(n): list.append(i+1) return list def run_josephus...+1 print(list[0]) m = 3 for n in range(11): list = initList(n+1) print(list) run_josephus...(list, m) ''' n = 3 list = initList(n) print(list) run_josephus(list, m) ''' 结果: [1] 1 [1, 2] 1 2 [1
分享给大家供大家参考,具体如下: 约瑟夫环问题: 39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓。...然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。 <?
据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈...然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。...Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。下图是约瑟夫问题的图例。
背景 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式...然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。...Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。 数学解法 ?...Java代码实现 public class Josephus { public static void main(String[] args) { //总人数为41 int total = 41;
void Delete_List(joseph *p,joseph *q) { q-> next= p-> next; free(p); } 删除节点(本质,释放内存空间) void josephus...->next=L; } void Delete_List(joseph *p,joseph *q) { q-> next= p-> next; free(p); } void josephus...\n"); else { Create_List(L, n); printf ("\n"); josephus
约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Josephus)提出的,他参加并记录了公元66—70年犹太人反抗罗马的起义。...约瑟夫环 * @参数 total:总人数 * @参数 from:第一个报数的人 * @参数 count:出列者喊到的数 * @作者 zheng * @更新 2013-12-5 */ void JOSEPHUS...JOSEPHUS(13,1,3); } 运行结果: delete number: 3 delete number: 6 delete number: 9 delete number: 12 delete...(int n, int m) { if(1 == n) { return 0; } return (josephus(n - 1, m) + m) % n...; } int main() { int n, m; cin >> n >> m; cout << "最后出列的人的编号为(从0开始编号):" << josephus(n, m)
下面给出用数组解决的源码: namespace JosephusRing { class Josephus { public int[] Jose(int total...return result; } static void Main(string[] args) { Josephus...jose = new Josephus(); int[] joseRing = jose.Jose(17,0,3); foreach(int num in
约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Josephus)提出的,他参加并记录了公元66—70年犹太人反抗罗马的起义。...约瑟夫环 * @参数 total:总人数 * @参数 from:第一个报数的人 * @参数 count:出列者喊到的数 * @作者 zheng * @更新 2013-12-5 */ void JOSEPHUS...->data); } int main() { int total, from, count; scanf("%d%d%d", &total, &from, &count); JOSEPHUS...(int n, int m) { if(1 == n) { return 0; } return (josephus(n - 1, m) + m) % n...; } int main() { int n, m; cin >> n >> m; cout << "最后出列的人的编号为(从0开始编号):" << josephus(n, m)
三、循环链表的应用---约瑟夫问题模拟 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到...然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。...Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。 这里我做了一个效果图,模拟下约瑟夫问题: ? 接下来我们如何用链表来模拟约瑟夫问题。...然而Josephus 和他的朋友并不想遵从。 首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。 接着,再越过k-1个人,并杀掉第k个人。...Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
zs.nextInt();// //打印 System.out.print("输入剔除的序号:"); int n = zs.nextInt(); josephus...(m, n); } //判断是否为约瑟夫数,方法,传入两个参数,一个总人数,一个报数 public static void josephus(int m, int n) {
代码示例: def Josephus_problem(num,gap): location_list = [a for a in range(1,num+1)] if num =...if index == 0: index = 0 print( "最后剩下的为:",location_list[0]) Josephus_problem
领取专属 10元无门槛券
手把手带您无忧上云