※有大神AC(0.1s, 152kb)就解決了,我的方法不夠好。
本解題報告僅提供縮排的想法。
縮排成一行也不是亂縮,基本class和main的架構還是要的。
我這題建表解決。
我用了幾個縮排技巧:
1. 匿名陣列
陣列只用一次時,比如當作函式的參數,可以這樣寫:func(new int[]{0, 1, 1, 2, 3, 5, 8});
這題建表就是匿名建在這,我需要輸出第n個值就這樣寫:System.out.println(new int[]{0, 25, 0, 0, 13…}[n]);
2. 匿名類別
輸入只使用一次,不用建立物件,直接寫:new Scanner(System.in).nextInt();
就會回傳唯一的那個輸入值了。
如果還想把import那行省下來,這邊可以這樣寫:new java.util.Scanner(System.in).nextInt();
不會多消耗什麼資源。
這邊我使用較快也較省記憶體的io類別BufferedReader,(StreamTokenizer至少要三行),所以整段輸入會變成這樣(要轉整數):Integer.parseInt(new java.io.BufferedReader(new java.io.InputStreamReader(System.in)).readLine());
3. 整數轉字串
如果使用字串陣列來存這題的資料,也不是不行,只是程式碼太多了:new String[]{"no answer", "25",...};
所以我用byte陣列來存,最後再將0取代成"no answer",這邊我原本是將答案+""(空字串),讓程式自動把byte promotion成String,不過經過實測,呼叫Byte.toString()會省一點空間。
這是最終的程式碼: (注意,我只放一小部分本題答案,其餘的自行補上)public class e914 {
public static void main(String[] args) throws java.io.IOException {
System.out.println(Byte.toString(new byte[]{0, 25, 0, 0, 13, 0, 38, …}[Integer.parseInt(new java.io.BufferedReader(new java.io.InputStreamReader(System.in)).readLine())-1]).replace("0", "no answer"));
}
}
希望這篇解題報告能幫助到你^_^