约瑟夫环问题// 约瑟夫环.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include
#include
#include
/*常量定义*/
#define OK 0 //成功执行
#define Err_Memory -1 //内存分配错误...
分类:
其他好文 时间:
2015-08-06 18:32:19
阅读次数:
116
题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。
分析:本题就是有名的约瑟夫环问题。既然题目有一个数字圆圈,很自然的想法是我们用一个数据结构来模拟这个圆圈。在常用的数据结构中,我们很容易想到用环形列...
分类:
其他好文 时间:
2015-08-05 22:22:13
阅读次数:
367
题目要求:
0, 1, … , n-1 这 n 个数字排成一个圈,从数字 0 开始每次从这个圈里删除第 m 个数字。求这个圈剩下的最后一个数字。本题是约瑟夫环问题。
除了以下给出的2中解法,更高级的算法:约瑟夫问题的两个O(log n)解法1. 环形链表由于要不断地从圈里删除一个数字,容易想到用链表实现。用链表将这 n 个数字存储,头尾相连,每隔 m 个删除一个,最后剩下的即为结果。
由于...
分类:
其他好文 时间:
2015-07-30 23:27:22
阅读次数:
215
约瑟夫环问题一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n,输出最后那个大王的编号。链表解法function king($n,$m){
$monky = range(1,$n);
$i = 0;...
分类:
Web程序 时间:
2015-07-17 12:05:39
阅读次数:
215
题目链接:点击进入
题目意思大概和约瑟夫环问题差不多,唯一的不同点在于起点改成了m;刚开始的时候我想直接链表模拟算了,但是后面一看,数据太大,就改用公式做了。约瑟夫环的公式是:f(n)=(f(n-1)+k)%n
,对于这个题起点为m,所以答案就会变成ans=(f(n)+m-k+1)%n;
ans有可能小于0,此时我们要给他加上一个n,ans+=n。代码如下:#include...
分类:
其他好文 时间:
2015-07-16 11:49:51
阅读次数:
201
题意 n个人顺时针围成一圈玩约瑟夫游戏 每个人手上有一个数val[i] 开始第k个人出队 若val[k] 0 时向左数val[k]个 第m出队的人可以得到m的约数个数个糖果 问得到最多糖果的人是谁
约瑟夫环问题 n比较大 直接模拟会超时 通过线段树可以让每次出队在O(logN)时间内完成 类似上一道插队的题 线段树维护对应区间还有多少个人没出队 那么当我们知道出队的人...
分类:
其他好文 时间:
2015-07-13 22:34:13
阅读次数:
237
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。求剩下最后的一个人的编号。
#include "stdafx.h"
#include
#include
using namespace std;
temp...
分类:
其他好文 时间:
2015-07-13 16:23:27
阅读次数:
114
今天讲的一道习题是很经典的约瑟夫环问题,其实lz对于链表的某些操作还不是太懂,所以在程序中有些地方还不太看得懂,这里借鉴的网上的做法,还请大牛能够解答我的疑惑,谢谢!标题:约瑟夫环说明:约瑟夫环是这么一个问题:已知n个人(编号1,2,。。。n)围坐在圆桌周围。从编号为k的人开始报数,数到m的人出列,...
分类:
编程语言 时间:
2015-07-13 11:51:13
阅读次数:
212
约瑟夫环问题的原来描述为,设有编号为1,2,……,n的n(n>0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,……,如此下去,直到所有人全部出圈为止。当任意给定n和m后,设计算法求n个人出圈的次序。稍微简化一下。 .....
分类:
其他好文 时间:
2015-07-09 06:15:54
阅读次数:
86
问题描述n个数字(0,1,...,n-1)形成一个圆圈,从数字0开始。每次从这个圆圈中删除第m个数字,然后从被删除的下一个继续删除第m个元素,以此类推。直到最后剩下一个数字,求出该数字。解决思路1. 使用循环链表模拟这一过程,计数器计数;2. 递归思路(图片来源:http://www.cnblogs...
分类:
其他好文 时间:
2015-07-06 12:05:52
阅读次数:
104