1. 程式人生 > 其它 >每日一題——烏托邦樹

每日一題——烏托邦樹

技術標籤:刷題日記

題目描述

實現一個演算法得到烏托邦樹的高度。介紹如下:

烏托邦樹每年經歷2個生長週期。每年春天,它的高度都會翻倍。每年夏天,他的高度都會增加1米。

對於一顆在春天開始時種下的高1米的樹,問經過指定週期後,樹的高度為多少?

輸入描述

輸入一個數字N(0<=N<=1000),表示指定週期。 例如,樣例輸入: 3

輸出描述

輸出一個數字,為經過指定週期後樹的高度。 例如,對應輸出: 6

如果採用尋常的資料描述形式,本題資料太大,會造成溢位,因此採用高精度描述,一下給出兩種Java高精度描述的方式。

參考程式碼

public static void main
(String[] args) { int n;//樹的生長週期數 short height[] = new short[1000000]; int k = 1;//樹高的位數 Scanner in = new Scanner(System.in); n = in.nextInt(); height[0]=1;//剛種下時為1米 while (n > 0) { for (int i = 0; i < k; i++) {//每年春天,樹高度翻倍,相當於每一位都乘二 height[
i] *= 2; } n--;//週期數減一 if (n == 0) break; height[0] += 1;//每年夏天,樹高度加一 for (int i = 0; i < k; i++) {//大於10的位數需要進位 height[i + 1] += height[i] / 10; height[i] %= 10; } if(height[k]!=0)k++;//位數加1 n--
; } for (int i = k-1; i >=0 ; i--) { System.out.print(height[i]); } System.out.println(); }

參考程式碼

public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        BigInteger height = new BigInteger("1");
        while (a > 0) {
            height = height.add(height);//春天翻倍
            a--;
            if (a == 0) break;
            height=height.add(new BigInteger("1"));//夏天加一
            a--;
        }
        System.out.println(height);
    }