经典的汉诺塔问题,我们在此基础上再在最后的输出结果中输出移动的是哪一片铜片。
#include <iostream>
using namespace std;
long long x;
long long y;
void move(char a,int n,char c)
{
x++;
if (x > y-100)
{
cout << a << "->" << c << ' ' << n << endl;
}
}
void hanoi(int n,char a,char b,char c)
{
if (n == 1)
{
move(a,1,c);
}
else
{
hanoi(n-1,a,c,b);
move (a,n,c);
hanoi(n-1,b,a,c);
}
}
long long sum(int n)
{
if (n == 1) return 1;
else
{
return 2*sum(n-1)+1;
}
}
int main()
{
int n;
while (cin >> n)
{
x = 0;
y = 0;
y = sum(n);
cout << y << endl;
hanoi(n,'A','B','C');
}
return 0;
}