精华0
威望70
K币251 元
注册时间2008-3-20
在线时间160 小时
最后登录2011-3-15
一般战友
- 精华
- 0
- 威望
- 70
- K币
- 251 元
- 注册时间
- 2008-3-20
|
汉诺塔
汉诺塔那题如何才能在1秒内出结果呢,输入25时,大概2秒,输入31时就只有等了,难道用非递归算法,那相对2小时8题来说有点难吧。以下是我写的递归算法,大家来说说看:
#include<iostream>
#include<math.h>
using namespace std;
long i;
long Move(int n,char a,char b)
{
if(n==1)
i++;
return i;
}
long Hanota(int n,char a='a',char b='b',char c='c')
{
if(n==1)
Move(n,a,c);
else
{
Hanota(n-1,a,c,b);
Move(1,a,c);
Hanota(n-1,b,a,c);
}
return i;
}
void main()
{
long d,h,m,s;
long i;
int n;
cin>>n;
char a,b,c;
i=Hanota(n,a,b,c);
cout<<"共移动"<<i<<"次"<<endl;
cout<<"每次一秒,共"<<i<<"秒,换算结果如下:"<<endl;
d=(i/3600)/24;
h=(i/3600)%24;
m=(i%3600)/60;
s=(i%3600)%60;
cout<<"共"<<d<<"天"<<h<<"小时"<<m<<"分钟"<<s<<"秒"<<endl;
} |
评分
-
查看全部评分
|