题目链接:汉诺塔III.
题目:
分析:
同经典汉诺塔问题类似,只是每次只能移动到相邻圆盘
只需要将经典的三步改成5步
设共有n个圆盘
- 将n-1个圆盘移动到目标盘
- 将最大盘移动到中间盘
- 将n-1个圆盘移动到初始盘
- 将最大盘移动到目标盘
- 将n-1个圆盘移动到目标盘
第一步,第三步,第五步,都需要移动n-1个圆盘
第二步,第四步都需要移动一次
则可以抽象出函数f(n)=3*f(n-1)+2;
AC代码:
import java.util.Scanner;
public class 汉诺塔III {
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);
while(sc.hasNext()){
int n=sc.nextInt();
System.out.println(arr[n]);
}
}
}