[汉诺塔][第二阶段-汉诺塔入门][HDOJ-2077]汉诺塔IV

来源:互联网 发布:金山软件框架 编辑:程序博客网 时间:2024/06/10 01:31
Problem Description
还记得汉诺塔III吗?他的规则是这样的:不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到小盘的上面。xhd在想如果我们允许最大的盘子放到最上面会怎么样呢?(只允许最大的放在最上面)当然最后需要的结果是盘子从小到大排在最右边。
 


Input
输入数据的第一行是一个数据T,表示有T组数据。
每组数据有一个正整数n(1 <= n <= 20),表示有n个盘子。
 


Output
对于每组输入数据,最少需要的摆放次数。
 


Sample Input
2110
 


Sample Output
219684
 

这题思路也很简单

N用来储存 第n大的盘子以上的部分 每次移动到下一个柱子需要的次数

所以 每次只需要 移动上面的盘子一次 然后 移动最大盘子两次 在移动上面的盘子一次


import java.util.Scanner;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner in = new Scanner(System.in);long[] num = new long[21];long[] N = new long[21];N[0]=0;int i;for(i=1;i<21;i++)N[i]=3*N[i-1]+1;for(i=1;i<21;i++)num[i]=2+2*N[i-1];int m = in.nextInt();while(m>0){int n = in.nextInt();System.out.println(num[n]);m--;}}}


0 0