1. 程式人生 > >uva 10254(四柱漢諾塔)

uva 10254(四柱漢諾塔)

題意:給出四柱漢諾塔上初始柱子上圓盤的數量n,問最優多少次移動可以移動到另一個柱子上。
題解:可以參考四柱漢諾塔之初步探究四柱漢諾塔實現這兩篇論文,理解四柱漢諾塔的原理。
但是這道題n是從1到10000,遞迴太多層,而且需要用到大數,所以要找規律,f[i] = f[i - 1] + 2^k,k從1開始每k+1次計算f[i]後增大1,初始f[1] = 1。

import java.math.BigInteger;
import java.util.*;

public class Main {
    public static void main(String[] arge) {
        BigInteger[] f = new
BigInteger[10005]; BigInteger One = BigInteger.ONE; BigInteger Zero = BigInteger.ZERO; f[0] = Zero; f[1] = One; int i = 2, k = 1; while (i <= 10000) { BigInteger Add = BigInteger.valueOf(1).shiftLeft(k); //1 << k for (int j = 0; j < k + 1
&& i <= 10000; j++, i++) f[i] = f[i - 1].add(Add); k++; } Scanner cin = new Scanner(System.in); while (cin.hasNext()) { int n = cin.nextInt(); System.out.println(f[n]); } }