思考与分析: 对于m为常数,能够用循环链表,用head,tail标志头尾指针使其易于表示循环结构。循环输出后删除结点n次,每次外层循环时。内层都固定循环m次。所以执行时间为O(mn)=O(n). 对于m为很数。能够用顺序统计树,用size属性记录每一个结点在当前树中所在的位置。经过一个取余过程,每次
转载
2017-08-03 16:36:00
92阅读
2评论
题目描述Do you know the famous Josephus Problem? There are n people standing in a circle waiting to be executed. The counting out begins at the first people in the circle and proceeds around the circl
原创
2021-07-06 13:46:48
109阅读
共9个坐一圈,由每次第2人开始报数,报到第3个出圈,求出圈顺序。 vector.h#ifndef vector_h__#define vector_h__# include # include enum boolen{TRUE, FALSE};typedef int ElementT...
转载
2016-09-09 08:38:00
96阅读
2评论
一群小孩围成一圈,任意假定一个数N,从第一个小孩起,逆时针方向数,每数到第M个小孩时,该小孩就离开,然后再由下一个重新报数,小孩不断离开,圈子不断缩小。最后,剩下的一个小孩便是胜利者。究竟胜利者是第几个小孩呢? 类似这样的问题都叫Josephus(约瑟夫斯)问题。我们可以用一个循环链表表示排成圆圈的人,整数i代表第i个人,先为1号建立一个单节点循环链表,再把2号到N号依次插入到1号节点后面,这样就形成了一个由1--N(逆时针)的员,最后x指向N,然后我们从1号开始跳过M-1个节点,把第M-1个节点的链接改为指向第M+1号节点,一直这样做,直到只剩下一个节点为止。#includeusing n.
转载
2012-07-27 23:12:00
60阅读
2评论
经典案例 古代某法官要判决 n 个犯人死刑,他有一条荒唐的逻辑,将犯人首尾的相接排成圆圈,然后从第 start 开始数起,每数到第 distance 个犯人,就拉出来处决;然后又数 distance 个,数到的犯人又拉出来处决,依次类推。剩下的最后一人可以豁免。 一群猴子排成一圈,按1,2,…,n依 ...
转载
2021-09-20 14:06:00
424阅读
2评论
Solution 1: Math Let f(n,k) denote the position of the survivor. After the kth person is killed, we're left with a circle of n-1, and we start the nex
转载
2016-12-17 01:53:00
138阅读
题目大意:有N个人,编号为1~N,按顺时 n; i++) num = (num + m) % i;当i很大,
原创
2014-12-09 20:31:03
83阅读
// ConsoleApplication5.cpp : 此文件包含 “main” 函数。程序执行将在此处开始并结束。//JoseshowList(Jon...
原创
2022-07-14 15:50:10
17阅读
题目要求:编号为1,2,...n的n个人按顺时针的方向围坐一个圈,每个人持有一个密码.一开始任选一个正整数作为报数的上限值m,从第一个人开
原创
2023-11-08 11:31:55
201阅读
题目链接: "戳我" ~~貌似是高一昨天的考试题T2?????感觉挺好玩的就搞了搞qwqwq 其实是HDU上面的题啦。。。。~~ 对于普通的约瑟夫问题,大概是n个人围成一个环,从1开始报数,数到k,那个人出队,最后留下来一个人的时候他就是胜利者,问最后胜利者是谁。 这个一般我们都用递归或者递推搞,设
原创
2021-07-16 09:47:09
105阅读
Josephus Transform(置换群&树状数组)思路:置换群&树状数组。考虑:用树状数组维护第kkk位置的编号。然后我们需要求出kkk对于的置换ppp。p[i]p[i]p[i]表示的含义是 编号为iii的对应人的位置是p[i]p[i]p[i]。然后进行快速幂,得到编号为iii对应的人的位置是ans[i]ans[i]ans[i]。因为要按位置输出,所以修改一下,p[ans[i]]=ip[ans[i]]=ip[ans[i]]=i。注意不能反过来快速幂,即设p[i]p[i]p
原创
2021-08-10 09:55:16
70阅读
Josephus Transform(置换群&树状数组)
思路:置换群&树状数组。
考虑:用树状数组维护第kkk的编号。
然后我们需要求出kkk对于的置换ppp。
原创
2022-01-22 10:42:36
51阅读
约瑟夫环问题(Josephus)
用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。(约瑟夫环问题 Josephus)
解法一(My Solution):
思想:建立一个有N个元素的循环链表,然后从链表头开始遍历并记数,如果计数i==m(i初始为1)踢出元素,继续循环,当当前
1 /************************************************************************/ 2 /* &n
原创
2017-05-03 12:23:11
458阅读
#include #include using namespace std;typedef struct node{ int data; struct node *next;}NODE;NODE* create_circlelist(int n) //建立不带头节点的循环单链表{ NODE* head; NODE* p;
原创
2021-05-28 23:45:38
286阅读
返回:贺老师课程教学链接 项目要求【项目-Josephus(约瑟夫环)问题】n个小孩子围成一圈,从第一个小孩子开始顺时针方向数数字,到第m个小孩子离开,这样反反复复,最终只剩下一个小孩子,求第几个小孩子留下? 提示:约瑟夫环即是一个首尾相连的链表,在建立好这个环以后
原创
2022-03-17 15:57:00
554阅读
#include #include using namespace std;typedef struct node{ int data; struct node *next;}NODE;NODE* create_circlelist(int n) //建立不带头节点的循环单链表{ NODE* head; NODE* p;
原创
2022-03-18 15:16:14
78阅读