题解 | #汉诺塔#

汉诺塔

http://www.nowcoder.com/questionTerminal/dd0dc9588fd94127b594b2adc3ebb346

很经典的递归题目
void dg(char a, char b, char c, int n)
a, b, c分别表示这三个杆子,n表示目前圆盘的个数
然后步骤:
目的:将a上面n个圆盘移动到c上面
第一步:将a上面的n - 1个圆盘移动到b上面
第二步:将a最下面的1个圆盘移动到c上面
第三步:将b上面的n - 1个圆盘移动到v上面
所以递归函数就是:
void dg(char a, char b, char c, int n){
    if(n == 0) return ;
    dg(a, c, b, n - 1);
    cout << a << " " << c << endl;
    dg(b, a, c, n - 1);
}
非常的煎蛋(不要深究,容易绕晕)
总代码:
#include<bits/stdc++.h>
using namespace std;

#define endl '\n'
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define HelloWorld IOS;


void dg(char a, char b, char c, int n){
    if(n == 0) return ;
    dg(a, c, b, n - 1);
    cout << a << " " << c << endl;
    dg(b, a, c, n - 1);
}
signed main(){
    HelloWorld;
    
    int n; cin >> n;
    dg('A', 'B', 'C', n);
    return 0;
}





全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务