汉诺塔 问题 IV

题目链接: 汉诺塔IV.

题目:

在这里插入图片描述

分析:

汉诺塔III.类似,

每次只允许移动到相邻的柱子上

只不过添加了一个条件

允许最大的盘子放在上边,

我们可以把问题分为三步

假设有n个盘子

  1. 先把n-1个盘子放在中间柱上
  2. 把最大的盘子放到目标柱
  3. 把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);
		}
	}
}

发布了79 篇原创文章 · 获赞 45 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43652327/article/details/104308612