每日一題——烏托邦樹
阿新 • • 發佈:2021-01-28
技術標籤:刷題日記
題目描述
實現一個演算法得到烏托邦樹的高度。介紹如下:
烏托邦樹每年經歷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);
}