续题
你们玩过汉诺塔游戏吗?
评论区玩过的call 1,没玩过的call 2.
今天我们就来做这一道汉诺塔问题
相信许多人都做过了
我写了两种代码
第一种没改良,放出来吓亖你们
int sum=0;
using namespace std;
void YDHNT(char x1,char x2) {
printf("%c TO %c\n",x1,x2);
sum++;
}
void HNT(int k, char k1, char k2, char k3) {
if (k==1) {
YDHNT(k1,k3);
} else {
HNT(k-1,k1,k3,k2);
YDHNT(k1,k3);
HNT(k-1,k2,k1,k3);
}
}
int main() {
int x;
scanf("%d", &x);
HNT(x,'A','B','C');
printf("%d\n",sum);
return 0;
}
两个函数,够壮观吧
后来又改良成为这样:
#include<bits/stdc++.h>
using namespace std;
int n,ans=0;
void HNT(int n,char a,char c,char b) {
if(n==0) return;
HNT(n-1,a,b,c);
cout<<a<<" TO "<<c<<endl;
ans++;
HNT(n-1,b,c,a);
}
int main() {
scanf("%d",&n);
HNT(n,'A','C','B');
cout<<ans;
return 0;
}
精简了一个函数,可观性还是很高的。