题目链接: 汉诺塔IV.
题目:
分析:
和 汉诺塔III.类似,
每次只允许移动到相邻的柱子上
只不过添加了一个条件
允许最大的盘子放在上边,
我们可以把问题分为三步
假设有n个盘子
- 先把n-1个盘子放在中间柱上
- 把最大的盘子放到目标柱
- 把n-1个盘子放到目标住
第一步,第三步分别需要n-1个圆盘移动一根柱子,即f(n-1)/2次
第二步,需要将最大的圆盘移动两次
则ans(n)=f(n-1)+2,f(n-1)=3*f(n-2)+2;
AC代码:
import java.util.Scanner;
public class 汉诺塔IV {
public static long arr[]=new long [36];
public static void f(int n){
arr[1]=2;
for(int i=2;i<36;i++){
arr[i]=3*arr[i-1]+2;
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
f(36);
int t=sc.nextInt();
while(t-->0){
int n=sc.nextInt();
System.out.println(arr[n-1]+2);
}
}
}