sdnu1075.我们爱汉诺塔

来源:互联网 发布:2017年it行业前景知乎 编辑:程序博客网 时间:2024/06/05 17:04

1075.我们爱汉诺塔
Time Limit: 1000 MS Memory Limit: 32768 KB
Total Submission(s): 286 Accepted Submission(s): 171
Description
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
最后将所有圆盘移动到C柱上。
Input
一个正整数n
Output
输出移动圆盘的最少次数的移动方法的每一步。每次移动输出一行,如从A到B,就输出A->B

Sample Input
3
Sample Output
A->C
A->B
C->B
A->C
B->A
B->C
A->C
Hint
void move(char [源柱名], char [目的柱名])
{
// 在这里输出从源柱移动到目的柱
}

void hanoi(int [圆盘数],char [源柱名],char [目的柱名],char [辅助柱名])
{
if([基本情况])
{
// 调用基本情况的move函数
}
else
{
// 按照其他情况调用move函数和递归调用hanoi函数
// 参照 如果有n > 1个碟子的情况
}
}
Source
Sharpbai

#include<cstdio>using namespace std;#include<algorithm>#include<iostream>#include<cmath>#include<iomanip>void move(int n, char x, char y, char z){    if(n==1) printf("%c->%c\n", x, z);    else {        move(n-1, x, z, y);        printf("%c->%c\n", x, z);        move(n-1, y, x, z);    }}int main(){    int n;    char x='A', y='B', z='C';    scanf("%d", &n);    move(n, x, y, z);    return 0;}