猴王问题的公式分析

haitao 2010-01-27 04:12:17
加精
猴王问题:
n只猴子,坐一圈,
从第一只开始点数,将第m只排除;
再从下一只重新数,又将第m只排除。。。。
直到剩下一只,为猴王,输出其序号x

程序模拟过程应该比较简单,只是模拟的就是复杂度很难降到0(n)

x(n,m)是有一定规律的,

有一个公式:
function x(n,m:Integer):Integer;
//n:开始时的人数;m:每次数数,第m个就要被剔除
var
s,i:Integer;
begin
s := 0;
//for i:=2 to n do //(1)这样的循环,结果是对的。
for i:=n downto 2 do //(2)这样的循环,结果是错的。
s:=(s+m) mod i;
result := s+1;
end;


2)这样的循环,结果是错的。
但是,它符合了,数数是从人数多时开始的,
没有考虑有人被剔除后,下标与人的起始编号已经不匹配了

(1)这样的循环,结果是对的。
按理说,数数是从人数多时开始的,它从少开始循环,却是对的!
可能这样反而已经考虑了 下标与人的起始编号已经不匹配 了!
不知道为什么会正好“错错得对”!


另外,不知道还能不能再进一步优化count函数为无须循环?
...全文
1658 71 打赏 收藏 转发到动态 举报
写回复
用AI写文章
71 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangxiaojia2010 2010-03-20
  • 打赏
  • 举报
回复
谢谢楼主分享
hk514 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jadeluo 的回复:]
约瑟夫问题
[/Quote]

就是个约瑟夫问题嘛, 大一C语言课就有作业做这个题
Divina 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 interlakers 的回复:]
好像这里的人都是高人啊,看来我真是落伍咯。大学里,学了一大堆没有用的东西。
[/Quote]

这东西就是大学里的
SlaughtChen 2010-02-02
  • 打赏
  • 举报
回复
谢谢楼主分享
zzmoutmans 2010-02-01
  • 打赏
  • 举报
回复
回帖是一种美德!
heybbs 2010-02-01
  • 打赏
  • 举报
回复
学习学习
confidenceluck 2010-01-31
  • 打赏
  • 举报
回复
[Quote=引用 43 楼 yang_asm 的回复:]
记得数据结构的书本例题就是LZ的题目

链表是比较容易理解的做法 循环链表 数数删除
或者用数组存放猴子的状态(数过,未数),时间复杂度和链表是一样的

不知有没听说过“线段树",时间复杂度可以改进为O(n)
[/Quote]

这个题目用线段树 怎么改进呢?
荣誉帝王 2010-01-31
  • 打赏
  • 举报
回复
学习了
BigBear 2010-01-31
  • 打赏
  • 举报
回复
用面向对象思想去做,用个双向循环链表应该可以做出来吧!主要要把故事说的完整些
baihacker 2010-01-31
  • 打赏
  • 举报
回复
用线段树分别记录一个相对位置,还有一个绝对位置的,二分出绝对位置来.
但是复杂度是O(slogn)的s表示第s个出局者.
求最后一个出局者就是O(nlogn).
其实应该有O(mlogn)求最后一个出局者的.
m表示报第m个数出局,n表示有n个人.
但是我没想出来
dbd27 2010-01-30
  • 打赏
  • 举报
回复
学习了
liujun3512159 2010-01-30
  • 打赏
  • 举报
回复
看看,动脑子太累
zm1014a 2010-01-30
  • 打赏
  • 举报
回复
谢谢,学习中
mrdyz 2010-01-30
  • 打赏
  • 举报
回复
不错啊
haojianfeng11 2010-01-30
  • 打赏
  • 举报
回复
已阅
微达 2010-01-29
  • 打赏
  • 举报
回复
好好学习吧
zhuoyue 2010-01-29
  • 打赏
  • 举报
回复
mark
hbjlwhl 2010-01-29
  • 打赏
  • 举报
回复
太难了。
johnhall 2010-01-29
  • 打赏
  • 举报
回复
约瑟夫问题 干吗叫厚望问题
cherrychris123 2010-01-29
  • 打赏
  • 举报
回复
学习了~~ 谢谢LZ分享哈
加载更多回复(46)

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧