数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖

汉诺塔的确切解

[复制链接]
 楼主| 发表于 2016-6-11 11:00 | 显示全部楼层
本帖最后由 高冷宅小胖妞 于 2016-6-11 11:01 编辑

如果总共的盘子数是奇数的话,上面的公式就要反过来。

k(n,总共奇数,盘号奇数)=3-((n mod 3)-1)mod3
k(n,总共奇数,盘号偶数)=3-((n mod 3)-2)mod3


接下来要思考如何判断总共第m步要移的是几号盘子。
 楼主| 发表于 2016-6-11 11:18 | 显示全部楼层

假设盘子总数为max,
第一步要移的总是第一号盘子。
第二步是二号盘子。
第三步是把一号盘子移到二号盘子上。
==以上为2号盘子以上的搬运完毕====
第四步移三号盘子。
第五步移一号。
第六步移二号。
第七步移一号。
===以上为3号盘子以上的搬运完毕


所以顺序是 121   3121  41213121 5121312141213121

以此类推。

我累了,去吃饭了!再见!
 楼主| 发表于 2016-6-11 12:14 | 显示全部楼层
本帖最后由 高冷宅小胖妞 于 2016-6-11 15:23 编辑

所以顺序是 121   3121  41213121 5121312141213121

序列
z(1)=121
z(2)=3121
z(3)=41213121

len表示长度
len(z,1)=3
len(z,n)=len(z,1)+len(z,2)+...+len(z,n-1)+1
sumlen(z,n)=len(z,1)+len(z,2)+...+len(z,n)
a = m-sumlen(z,n-1)
if a >0 && a<len(z,n)
则当前m在第n个序列上

if a=1
则要移动n+1号盘,是n+1号盘第一次移动

if a=len(z,n-1)+1
则要移动n号盘,是n号盘第2次移动

if m mod len(z,n-2) = 1
则要移动n-1号盘,是n-1号盘第2+floor(m mod len(z,n-2))次移动

……

if m mod len(z,1)=1
则要移动1号盘,是1号盘第n*(n-1)+floor(m mod len(z,1) )次移动
 楼主| 发表于 2016-6-11 12:24 | 显示全部楼层
:L:L:L:L

怎么都没人回呢?????

嗯哼?????
 楼主| 发表于 2016-6-11 12:51 | 显示全部楼层
顺便打个广告,版主手下留情。

我在晋江文学城的笔名,也是我在这个论坛的id,高冷宅小胖妞。
如果大家对女频言情yy小说感兴趣的话,可以来看我的小说哦!
 楼主| 发表于 2016-6-11 16:25 | 显示全部楼层
逛了一圈,发现这里好高级啊。好高大上的地方。

我在考虑要不要把我这个帖子给删了。

(画圈圈)我今早睡觉的时候突然梦到汉诺塔的,梦醒以后就开始推,边推边发,也不知道有没有搞错了。

百度了一下数学论坛就到这里了。

发完帖子以后,逛了逛贵论坛,发现好高大上啊!于是我的这个帖子会不会有点丢人现眼……

另外我还看到有人在讨伐“民科”。orz。我不会也被喷吧?虽然我只是个普通的大学毕业生,和“民科”挨不上边。

囧了。
发表于 2016-6-12 12:29 | 显示全部楼层
盘子移动只要根据当前要移动的盘子和最大盘子的距离就好了,应该和奇偶性无关,具体我再想想
发表于 2016-6-28 06:14 | 显示全部楼层
def hannoi(n,f,b,t):
        if n==1:
                print "Move disk",n,"from",f,"to",t
        else:
                hannoi(n-1,f,t,b)
                print "Move disk",n,'from',f,'to',t
                hannoi(n-1,b,f,t)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2025-5-8 18:01 , Processed in 0.098913 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表