BloggerAds

2011年7月10日 星期日

d025: 2007 程式達人 H - 隱藏聖杯地圖

內容:


達文西密碼書中,主張耶穌在最後晚餐時所使用的聖杯是埋在英國某處,其實不然。根據可靠消息顯示,聖杯其實還靜靜地躺在地球的另一個角落,由一位歷代相傳、忠心耿耿的守護者看管著記載聖杯所在之處的地圖。


但由於達文西密碼一書轟動全球,引發了一波又一波尋找聖杯的浪潮。這位守護者因此憂心重重,深怕聖杯被遭人盜取。最近守護者聽說你是地圖隱藏專家,為避免地圖外洩,特來找你來研究看看,如何能將地圖妥善隱藏。


目前地圖是繪製在一塊圓形的石碑上,經過你的研究之後,決定建議守護者將石碑以特殊高壓方式切割後,分藏各地。這個高壓切割方法相當特殊,它是先在這形石碑的邊緣打上一些小洞,然後用高壓槍對石碑施壓。當壓力充分分佈到石碑後,石碑就會沿著連結那些小洞的所有直線裂成好幾塊。例如,如果打了 3 個洞,圓形石碑就會裂成 4 塊— 1 個三角形和 3 塊半月形狀。如果打了 4 個洞,圓形石碑就會裂成 8。如果打了 5 個洞,圓形石碑就會裂成 16 塊(如下圖所示)。但守護者還想知道,若在圓形石碑的邊緣打 n 個洞,最多可以將石碑分成幾塊?你決定寫支程式來回答這個問題。


d025: 2007 程式達人 H - 隱藏聖杯地圖  


很簡單的一道題目


要限制範圍 加個if 就OK了


輸入說明:


輸入檔由多列組成。每個測試案例是一列存一個數字 n, (1 ≦ n ≦ 100)。輸入檔中最多有 50 筆資料(列),當 n = 0 時,表示輸入檔的 eof 。


輸出說明:


每列印出所能切割出的最大數目。(當 1 ≦ n ≦ 100,最大值小於 224-1 ).


範例輸入:


1 
2
3
4
5
10
0


範例輸出:


1 
2
4
8
16
256

===================

import java.util.ArrayList;
import java.util.Scanner;


public class HideCup {
public static void main(String[] args) {
Scanner scan =new Scanner(System.in);
HideCup hc=new HideCup();
ArrayList<Integer> intArray =new ArrayList<Integer>();
System.out.println("Please enter holes until enter 0:");
while(0<1){
intArray.add(scan.nextInt());
//如果輸入為0,移除並離開
if(intArray.get(intArray.size()-1).equals(0)){
intArray.remove(intArray.size()-1);
break;
}
}
hc.Block(intArray);
}
//計算並列印塊數
private void Block(ArrayList<Integer> data){
for(int x=0;x<data.size();x++){
System.out.println("洞數:"+data.get(x)+"塊數:"+(int)Math.pow(2,data.get(x)-1));
}
}

}