标题:C++求助!四个柱子的汉若塔问题出错
只看楼主
小小唐
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-10-21
 问题点数:0 回复次数:9 
C++求助!四个柱子的汉若塔问题出错

4个柱子的汉若塔问题,输入盘子数,输出最少的步骤数.自己编了一个,好象不对,哪位高手帮忙!
#include<iostream.h>

long int hanoi(int m)
{
long int p;
if(m==1)
p=1;
else
if(m==2)
p=3;
else
p=2*hanoi(m-2)+3;
return p;
}

int main()
{
int n;
long int q;
while(cin>>n)
{
q=hanoi(n);
cout<<q<<endl;
}
return 0;
}

多多指教!

[此贴子已经被作者于2007-11-2 13:43:00编辑过]

搜索更多相关主题的帖子: 塔问题 柱子 int hanoi 
2007-11-02 13:38
blosaa
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-10-17
得分:0 
1.你没把四个柱子问题说清楚,说以我不知道你写的是什么东西,要达到什么结果!!!!!!!!!!!!
2007-11-02 13:59
wangtuan7788
Rank: 1
等 级:新手上路
帖 子:286
专家分:0
注 册:2007-10-8
得分:0 
汉诺塔还有四个柱子的?

你笑我和你们不一样,我笑你们大家都一样~
2007-11-02 14:02
小小唐
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-10-21
得分:0 

那好吧.我把题目打上.

汉诺塔II

经典的汉诺塔问题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘。有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今仍在一刻不停地搬动着圆盘。恩,当然这个传说并不可信,如今汉诺塔更多的是作为一个玩具存在。Gardon就收到了一个汉诺塔玩具作为生日礼物。
  Gardon是个怕麻烦的人(恩,就是爱偷懒的人),很显然将64个圆盘逐一搬动直到所有的盘子都到达第三个柱子上很困难,所以Gardon决定作个小弊,他又找来了一根一模一样的柱子,通过这个柱子来更快的把所有的盘子移到第三个柱子上。下面的问题就是:当Gardon在一次游戏中使用了N个盘子时,他需要多少次移动才能把他们都移到第三个柱子上?很显然,在没有第四个柱子时,问题的解是2^N-1,但现在有了这个柱子的帮助,又该是多少呢?

Input 包含多组数据,每个数据一行,是盘子的数目N(1<=N<=64)。

Output 对于每组数据,输出一个数,到达目标需要的最少的移动数。

Sample Input
1
3
12

Sample Output

1 
5 
81 

就是我,独一无二的我!
2007-11-02 14:03
小小唐
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-10-21
得分:0 
回复:(blosaa)1.你没把四个柱子问题说清楚,说以我...

那好吧.我把题目打上.

汉诺塔II

经典的汉诺塔问题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘。有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今仍在一刻不停地搬动着圆盘。恩,当然这个传说并不可信,如今汉诺塔更多的是作为一个玩具存在。Gardon就收到了一个汉诺塔玩具作为生日礼物。
  Gardon是个怕麻烦的人(恩,就是爱偷懒的人),很显然将64个圆盘逐一搬动直到所有的盘子都到达第三个柱子上很困难,所以Gardon决定作个小弊,他又找来了一根一模一样的柱子,通过这个柱子来更快的把所有的盘子移到第三个柱子上。下面的问题就是:当Gardon在一次游戏中使用了N个盘子时,他需要多少次移动才能把他们都移到第三个柱子上?很显然,在没有第四个柱子时,问题的解是2^N-1,但现在有了这个柱子的帮助,又该是多少呢?

Input 包含多组数据,每个数据一行,是盘子的数目N(1<=N<=64)。

Output 对于每组数据,输出一个数,到达目标需要的最少的移动数。

Sample Input
1
3
12

Sample Output

1 
5
81

就是我,独一无二的我!
2007-11-02 14:04
blosaa
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-10-17
得分:0 
11

[此贴子已经被作者于2007-11-2 14:09:24编辑过]


2007-11-02 14:07
blosaa
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-10-17
得分:0 
有四个柱子呀,哪不是很麻烦吗???也没听说过撒,只把三个柱子个写了一下

#include<iostream.h>
#include<stdlib.h>

void hanio(int n,char x,char y,char z);
void move(char o,char p);

void main()
{
int m;
cout<<"输入有几个盘子:";
cin>>m;
hanio(m,'A','B','C');
}

void hanio(int n,char x,char y,char z)
{
if(n==1)
{
move(x,z);
}
else if(n<=0)
{
cout<<"输入错误!!!!"<<endl;
exit(1);
}
else
{
hanio(n-1,x,z,y);
move(x,z);
hanio(n-1,y,x,z);
}
}

void move(char o,char p)
{
cout<<o<<"------->"<<p<<endl;

}
2007-11-02 14:26
小小唐
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-10-21
得分:0 
回复:(blosaa)有四个柱子呀,哪不是很麻烦吗???...
三跟柱子的我已经会做了.四根柱子的只要用递归算法算出移动的最少次数就行了,不用列出步骤.我找的递归关系好象不是移动最少的.

就是我,独一无二的我!
2007-11-03 17:55
coolszy
Rank: 1
来 自:编程论坛
等 级:新手上路
帖 子:241
专家分:5
注 册:2007-11-3
得分:0 
汉诺塔还有四个柱子的?

天道酬勤
2007-11-03 18:35
小小唐
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-10-21
得分:0 
回复:(小小唐)回复:(blosaa)有四个柱子呀,哪不...

是呀,三根的谁都会做了.


就是我,独一无二的我!
2007-11-03 21:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-182854-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.277772 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved