#34531: Java一行解 「極限縮排」 一行331個字


liaoweichen1024@gmail.com (M_SQRT)

學校 : 新北市立新莊高級中學
編號 : 195452
來源 : [122.116.111.175]
最後登入時間 :
2024-04-30 21:28:05
e914. pB. 年紀計算 -- 2019大學學測推甄申請二階 | From: [211.75.180.193] | 發表日期 : 2023-03-27 19:59

有大神AC(0.1s, 152kb)就解決了,我的方法不夠好。
本解題報告僅提供縮排的想法。

縮排成一行也不是亂縮,基本classmain的架構還是要的。

我這題建表解決。

我用了幾個縮排技巧:

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 promotionString,不過經過實測,呼叫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"));
          }
}

希望這篇解題報告能幫助到你^_^

 
ZeroJudge Forum