一:题目

二:思路

三:代码
#include<bits/stdc++.h>
using namespace std;
long long cnt;
//柱子定义为x, y, z
void move(int n, char x, char y, char z)
{
if(n == 1)
{
//printf("%c -> %c\n", x, y);//最大盘从x->y
//printf("%c -> %c\n", y, z);//最大盘从y->z
cnt += 2;
return;
}
work(n-1, 'a', 'b', 'c');//前n-1个盘子从a柱借助b柱移动到c柱
//printf("%c -> %c\n", x, y);//最大盘从x->y
cnt++;
work(n-1, 'c', 'b', 'a');//前n-1个盘子从c柱借助b柱移动到a柱
//printf("%c -> %c\n", y, z);//最大盘从y->z
cnt++;
work(n-1, 'a', 'b', 'c');//递归处理n-1个盘子的字问题
}
int main()
{
int n;
while(~scanf("%d", &n))
{
cnt = 0;
work(n, 'a', 'b', 'c');
cout << cnt << endl;
}
return 0;
}