發表文章

目前顯示的是有「java」標籤的文章

Kotlin 與 Swift 語法對照:跨平台開發者 (2025年)

Kotlin 與 Swift 語法對照表(2025 年版) 在行動應用開發中, Kotlin 與 Swift 分別是 Android 與 iOS 的主流語言。雖然語法有些差異,但其實它們有很多相似之處。本文整理了常用的語法對照表,方便跨平台開發者快速上手。 1. 變數宣告 // Kotlin val name: String = "Alice" // 常數 var age: Int = 25 // 可變數 // Swift let name: String = "Alice" // 常數 var age: Int = 25 // 可變數 2. 條件判斷 // Kotlin if (age >= 18) { println("Adult") } else { println("Minor") } // Swift if age >= 18 { print("Adult") } else { print("Minor") } 3. 函式定義 // Kotlin fun greet(name: String): String { return "Hello, $name!" } // Swift func greet(_ name: String) -> String { return "Hello, \(name)!" } 4. 陣列與迴圈 // Kotlin val fruits = listOf("Apple", "Banana", "Cherry") for (fruit in fruits) { println(fruit) } // Swift let fruits = ["Apple", "Banana", "Cherry"] for fruit in fruits { print(f...

[Java] UVa 113 Power of Cryptography

題目連結 題意: 每組給定數字 n 跟 p 求 p 開 n 方後的值 k 解法: 我們都知道 pow 的用法為 pow(a, b) 可以得到 a 的 b 次方 其實開 n 方就是 1/n 次方 所以 pow(p, 1/n) 就是答案 pow的參數要放double 只是保險起見將 1 寫成浮點數型別 程式(Java):

[Java] UVa 11875 Brick Game

題目連結 題意: 有一種 Team Game,奇數個成員 給定所有人的年紀 題目要決定一個老大 比他大的人數要與比他小的相同 求老大是誰,輸出他的年紀 解法: 奇數堆,依題意就是要中位數 這題關鍵在 Input 最後提到 測資必然遞增或遞減 都幫你排序過了,把中間抓出來就好 程式(Java):

[Java] UVa 10878 Decode the tape

題目連結 題意: 給你落落長的文字 根據範例輸出入的規則 輸出對應的答案 解法: 看完題目會發現什麼都沒講 只能從範例輸出入觀察 也因為這樣,直覺認為跟ASCII有關 所以這題考的是對ASCII的熟悉與字串處理 對於輸入,我先數了行數 有o的行數跟輸出的字元數差不多 可以猜到一行對應一個字元  . 不考慮有8位,大概是二進位的組合 拿A來說,ASCII = 65 首行有2個圈圈 65 = 01000001(2) | o   .  o| 拿 q 再驗證 113 = 01110001(4) | ooo .  o| 照這個想法建一個陣列 依序存 128, 64, ..., 1 然後讀測資遇到o就加上該值 (二進位轉十進位) 最後以字元形式輸出 程式(Java):

[Java] UVa 10295 Hay Points

題目連結 題意: 有多個單字與對應分數 之後有好幾組題目 每一組題目1~多行(.結尾) 統計題目中各單字出現次數 轉成分數並加總 如: 3 1 abc 2 def 3 gh 4 abc abc abc def gh gh gh gh gh . 總和: 2*3 + 3*1 + 4*5 = 29 解法: 字典題,出動 HashMap 先將字典建好 (Key - Value, 字串對應數字) 讀題目時,逐個單字讀取 每個單字都去字典找,找到則計算分數統計 程式(Java):

[Java] UVa 10110 Light, more light

題目連結 題意: 有個工人在有 n 個燈泡的走廊巡邏 他總共會巡邏 n 次 已知燈泡編號 1 ~ n 第 i 次巡邏會將編號 i 倍數的所有燈泡按下 (若燈泡每次按下就是開、關切換) 假設一開始燈泡都是暗的 若巡邏完後,最後一個燈泡是亮的,輸出 yes 反之,輸出 no 舉例來說,假設 n = 4,一開始全暗 第 1 次巡邏,按下 1 2 3 4,此時全亮 第 2 次巡邏,按下 2 4,此時1 3亮 第 3 次巡邏,按下 3,此時1亮 第 4 次巡邏,按下 4,此時1 4亮 最終 4 是亮的,輸出yes 解法: 這題難在題意XD 看得懂就是水題了 題目只問編號 n 的燈泡,其他不用關心 以上述例子來說 會影響到 4 的就是 1 2 4,也就是 4 的因數 要使最後結果為亮,因數個數必為奇數 只有當 n 為完全平方數才符合(因數: 1, 平方根 & 自己) 所以理解後就是判斷 n 是否為平方根即可 以我的作法來說,我用 Math.sqrt( ) (求某數的平方根) 只有 n 為完全平方數時,回傳值才為整數 若否, % 1 後結果就不為 0 程式(Java):

[Java] UVa 483 Word Scramble

題目連結 題意: 給定多行字串 每行空格之間為一單字 每個單字要反轉輸出 檔尾結束 EX: 123 456 7890 輸出: 321 654 0987 解法: 一開始我用 split 切割空格 每個單字各自反轉輸出 結果得到 presentation error 因為題目原本多少空格就要輸出多少個 如: 123   45 321   54 就不能這樣讀測資了 後來只好逐個字元判斷 用 stack 讀每個單字 遇到空格就先輸出(清空) stack 再輸出空格 由於機制是遇到空格才輸出 最後迴圈離開後再補一次輸出 stack 程式(Java):

[Java] UVa 10921 Find the Telephone

題目連結 題意: 給定數行測資 每行30個字以內 依題目規定將測資的英文字轉成特定數字 ABC - > 1 DEF - > 2 ... 解法: 沒有特殊技巧 逐字讀取並判斷後輸出即可 測資只會有大寫英文字,  - , 0, 1 不是英文字就直接輸出 程式(Java):

[Java] UVa 382 Perfection

題目連結 題意: 測資只有一行,N個數字 數字間以空格相鄰 每個數字計算其所有因數總和(不含自己) 總和等於自己: PERFECT 小於/大於: DEFICIENT/ABUNDANT 輸出依範例輸出的格式 解法: 主要考你找因數的方法 看測資在60000以下,可以暴力找 找完加總,看情況輸出即可 (1好像歸在DEFICIENT) 程式(Java):

[Java] UVa 11942 Lumberjack Sequencing

題目連結 題意: 每組10個數字 10個數字遞增或遞減,輸出 Ordered 否則輸出 Unordered 解法: 遞增或遞減都輸出 ordered 可以先判斷首二者的關係(遞增或遞減) 後續關係持續遞增或遞減即可 題目沒有提到相同的情況,就不額外考慮 如: 1 1 1 1 2 2 2 2 3 4 程式(Java):

[Java] UVa 11854 Egypt

題目連結 題意: 給定三段長度 判斷是否可形成直角三角形 是,輸出 right 否,輸出 wrong 解法: 先排序後,判斷 兩小邊之平方和是否等於最大邊之平方 程式(Java):

[Java] UVa 1225 Digit Counting

題目連結 題意: 給定 N 計算從1 ~ N,0 ~ 9出現的次數 解法: 一個想太多 範圍在10000以內,暴力求即可 超過10的數就一位一位數分解 程式(Java):

[Java] UVa 621 Secret Research

題目連結 題意: 給定一個數字(沒說會多大) 判斷是4種情況的哪種 + 數字為1 或 4 或 78 - 數字結尾為 35,如: 1935, 77777735 * 數字 9 開頭 4 結尾 ? 數字 190 開頭 解法: 當成字串就好 很簡單的字串比對 題目說無法分析時就輸出第一個符合的 所以依 + - * ? 順序判斷即可 假設測資必符合其中一種 (題目沒說有例外) 如果有用 uDebug,會發現出現不屬於任一種的測資,參考解答卻跑得出結果 可能是他的程式把其中一種 Case 當最後的 else (也就是不屬於其他三者的都會掉到這個else) 程式(Java):

[Java] UVa 686 Goldbach’s Conjecture (II)

題目連結 題意: 給定正整數 n (4~2^15) 求該數為兩質數之和的組合個數 令 n = p1 + p2 求 p1 和 p2 皆為質數的情況有多少? (p1可以等於p2) 如: n = 4 4=2+2(2為質數) 輸出 1 n = 10 10 = 3 + 7 10 = 5 + 5 輸出 2 解法: 先建質數表 檢驗所有p1 和 p2 組合即可 除了  n = 4 以外 其他數不可能有偶數的質數 所以檢驗時可以排除偶數 時間至少省一半 (建質數表也可以只建奇數) 程式(Java):

[Java] UVa 10268 498-bis

題目連結 題意: 計算多項式微分之後的值 每組測資兩行 第一行是 x 的值 第二行是 多項式各項係數 例如: 7 (x = 7) 1 -1 (x-1) x - 1 微分後為 1,不用代入x 答案為 1 2 (x = 2) 1 1 1 (x^2+x+1) 微分後為 2x+1 代入得解為 5 解法: 按微分後的寫法求解即可 須注意本題的測資 數字間不一定只有一個空格 如果只以單空格去切會 Runtime error 例如: 2 1 1   1 以字串讀入後 切開可以寫成: String s = sc.nextLine(); String str[] = s.split("\\s+"); 這是正規表達式的寫法 \\s表示有一個空格 +表示可能為1~多個 符合空格1~多個就切開 範圍會達2^31,要用long 程式(Java):

[Java] UVa 11340 Newspaper

題目連結 題意: 報紙投稿賺稿費 先給 K 個字元與稿費的對照 再給 M 行內容 計算所有內容的稿費總金額 (沒寫的字元以 0 元計算) 測資的稿費單位是分 cent 輸出時要輸出元 dollar 1 元 = 100 分 雖然題目沒說到第幾位 根據下面這行 Examples: ‘3.32$’, ‘13.07$’, ‘71.30$’, ‘0.09$’. 就是輸出到第 2 位吧 解法: 一開始我想的是用 HashMap ASCII 字元不過就 256 個 其實用一維陣列就可 每次清空 0,有提到的字元設值 最後求總值 一開始看似 uDebug都沒問題 提交後出現可怕的 Runtime error 上網查發現問題出在測資 疑似參雜了 ASCII 超過 256 的字元 其他語言的狀況我不了解 後來是在 Scanner 宣告時如下 Scanner sc = new Scanner(System.in,"ISO-8859-1"); 加上 ISO-8859-1,才解決問題 程式(Java):

[Java] UVa 11689 Soda Surpler

圖片
題目連結 題意: 汽水控 有 N 組測資 每組測資如下: 有 e 瓶 空瓶 ,撿到 f 瓶 空瓶 每 c 個空瓶可以換新的一瓶 求可以 喝到 幾瓶汽水 解法: 題目問"喝到幾瓶" e 跟 f 都是空瓶,不能算進去答案 令 own 為當下空瓶數 原始 own = e+f 每次都去除 c,統計數量即可 注意每次換新瓶前 own 要加上上次沒換的 例如: own = 10, c = 2 第一次換了 5 瓶,剩 0 空瓶 此時共喝 5 瓶,own = 5 再來換 5/2 = 2 瓶, 剩 1 空瓶 此時共喝 5+2 = 7 瓶 own 為 2+1 = 3 再來換 3/2 = 1 瓶, 剩 1 空瓶 此時共喝 7+1 = 8 瓶 own 為 1+1 = 2 還可以換 2/2 = 1 瓶,沒有剩下 此時共喝 8+1 = 9 瓶 own 為 1 所以結算下次的 own 時 要去看當次 own/c 能不能整除 如果整除 就是產生 own/c 空瓶 如果不整除,如下例: 會剩下 own - (own/c)*c 下次的 own 就是 own - (own/c)*(c-1) 寫成 own -= (own/c)*(c-1); 程式(Java):

[Java] UVa 13148 A Giveaway

題目連結 題意: 給定一個數 N(1億以內) 如果是一數的平方,也是另一數的次方 輸出 Special 例如: 1, 64, 729, ... 否則,輸出 Ordinary 解法: 題目很好心... 範圍內的結果通通告訴你 用 if else 判斷就可以暴力解決 正常方法就是分別開 2 方與開 3 方 理論上結果都是整數就是 Special 這裡用到的方法是 Math 的 pow(m, n) 可以回傳 m 的 n 次方(double) 開 2 方就是 * 1/2次方 開 3 方就是 * 1/3次方 不過,如果寫成  Math.pow(N, 1/2) 會發現結果是 1 因為直接 1/2 會 = 0 (整數/整數) 任何數的 0 次方為 1 所以要先強制轉型:  Math.pow(N, (float)1/2) 以為這樣就可以了 結果卻發生另一件事 如: Math.pow(64, (double)1/3) = 3.9999999999999996 Math.pow(64, (float)1/3) = 4.000000165259169 Java 的浮點數在計算上產生了極小誤差 反正我們要的是整數 可以用 Math.Round 或其他方式 取最趨近的整數值後逆推回去 看該數的平方或立方是不是原數即可 再者 該數同時為一數的平方,與另一數的次方 則該數必滿足為某數的 6 次方 只要思考質因數分解 假設 N = A ^ 2 = B ^ 3 必然存在 N = (C ^ 2) ^ 3 可以觀察題目提供的數: 1 = 1 ^ 6 64 = 2 ^ 6 729 = 3 ^ 6 4096 = 4 ^ 6 所以只要開 6 次 取整數乘回去 = N 即是解 程式(Java): 目前 GitHub gist 有些狀況 當程式看不見,請參考: https://github.com/maxi67/UVa/blob/master/UVa13148.java

[Java] UVa 151 Power Crisis

題目連結 題意: 能源危機,各個地區要輪流限電 給定 N ,代表有 1~N 個地區 每次都從 1 開始 求最小正整數 m 使得重複每 m 個地區斷電後 最後一個斷電的是地區 13 超過 N 後再從 1 開始 已經斷電的則跳過 例如: N = 13,m = 1 斷電順序 : 1, 2, ..., 13 若 N = 14, m = 2 斷電順序 : 1, 3, 5, 7, 9, 11, 13, ... 斷到 13 後下一個預計是 2 也就是 13 並不是最後斷電 2 就不是答案 解法: 暴力模擬即可 如果 N 限定過大可能就行不通 題目要求最小的 m 就從 1 開始代入 每次從 1 開始,每 m 個一數 數到 13 就看是不是最後一個 m 可能超過 N,例如 N = 14, m = 18 目前不確定該取多少 不過 N 只介於 13 ~ 100 保險一點倒是可以先測測看 (N 代 13~100 最大的 m 為多少) 此外 這題其實是一個特殊題型 叫做 約瑟夫問題 了解的人可以直接套用公式求解 詳情可以參考:  約瑟夫問題(Josephus Problem) 程式(Java):

[Java] UVa 414 Machined Surfaces

圖片
題目連結 題意: 給定 25 * N 範圍的圖 圖上兩邊有字、中間空白 'X' 代表字,'B' 空白(實際上是空白字元) 圖的兩邊要拼在一起 求拼起來後空隙的數量 解法: 討論以下情況 紅橙代表兩邊的X 當 N 只有一行 必然可以完全接合 -------------------------------- 再看以下 各行都含一個空格 可以平移 1 位後完全接合 -------------------------------- 若某一行多一空格 則該空格就會形成空隙 -------------------------------- 再看一個例子 空格數分別為 1, 2, 3, 4, 1 可以平移 1 位 -------------------------------- 也就是說 最多可以平移各行間最小的空格數 剩下的都會形成空隙 總結以上 求出各行之間最少的空格數 計算比它多的各行差值 最後加總就是答案 程式(Java):

[Java] HashMap(Map)可以解的UVa題型

HashMap - Key 與 Value 1. 多組 A 之於 B,給定 A,呼叫 B 10282 Babelfish 11233 Deli Deli 11917 Do Your Own Homework! 2. 給定多個字串,統計個數後依順序輸出 10226 Hardwood Species 10420 List of Conquests 3. HashMap 的 Value 為一個 list,也就是一對多 11991 Easy Problem from Rujia Liu? 一個數字對應多個出現的 index