uva 10254(四柱漢諾塔)
阿新 • • 發佈:2019-02-16
題意:給出四柱漢諾塔上初始柱子上圓盤的數量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]);
}
}