智力測驗 - 秤重問題 (三)
題目有十二個乒乓球特徵相同,其中只有一個重量異常 (不知道是較重或較輕),現在要求用一部沒有砝碼的天平秤三次,將那個重量異常的球找出來。 解答將球編號並分堆如下:A = [1, 2, 3, 4]B = [5, 6, 7, 8]C = [9, 10, 11]D = [12] 如果 A = B,則 C 或 12 有問題。 如果 [1, 2, 3] = C,則 12 有問題。 如果 1 > 12,則 12 較輕。 如果 1 < 12,則 12 較重。 如果 [1, 2, 3] > C,則 C 有問題且較輕。 如果 9 = 10,則 11 較輕。 如果 9 > 10,則 10 較輕。 如果 9 < 10,則 9 較輕。 如果 [1, 2, 3] < C,則 C 有問題且較重。 如果 9 = 10,則 11 較重。 如果 9 > 10,則 9 較重。 如果 9 < 10,則 10 較重。 如果 A > B,則 A 或 B 有問題,且 A 較重或 ...
智力測驗 - 秤重問題 (二)
題目籃子裡面有 10 顆球,其中一顆有問題,請你利用天平,秤重三次之後把那顆球找出來,並說明他是比較重或輕? 解答將球編號並分堆如下:A = [1, 2, 3]B = [4, 5, 6]C = [7, 8, 9]D = [10] 如果 A = B,則 C 或 10 有問題。 如果 A = C,則 10 有問題。 如果 1 > 10,則 10 較輕。 如果 1 < 10,則 10 較重。 如果 A > C,則 C 有問題且較輕。 如果 7 = 8,則 9 較輕。 如果 7 > 8,則 8 較輕。 如果 7 < 8,則 7 較輕。 如果 A < C,則 C 有問題且較重。 如果 7 = 8,則 9 較重。 如果 7 > 8,則 7 較重。 如果 7 < 8,則 8 較重。 如果 A > B,則 A 或 B 有問題,且 A 較重或 B 較輕。 如果 A = C,則 B 有問題且較輕。 如果 4 = 5,則 6 較輕。 如果 ...
智力測驗 - 秤重問題 (一)
題目有8顆球,其中 7 個重量一樣,只有 1 個較輕,用一個天平,試以最少測量次數來找出有問題的那一個球。 提示最少為兩次可找出。 解答將球編號並分堆如下:A = [1, 2, 3]B = [4, 5, 6]C = [7, 8] 如果 A = B,則 C 有問題。 如果 7 > 8,則 8 有問題。 如果 7 < 8,則 7 有問題。 如果 A > B,則 B 有問題。 如果 4 = 5,則 6 有問題。 如果 4 > 5,則 5 有問題。 如果 4 < 5,則 4 有問題。 如果 A < B,則 A 有問題。 如果 1 = 2,則 3 有問題。 如果 1 > 2,則 2 有問題。 如果 1 < 2,則 1 有問題。 題目修改為有一個較重也可以用重樣方式找出,這類型的題目可以透過編號的方式有助於求解。 延伸閱讀下一篇 智力測驗 - 秤重問題 (二)
智力測驗 - 猜生日
題目小明和小強都是張老師的學生,張老師的生日是 M 月 N 日,2 人都知道張老師的生日是下列 10 組中的一天。 張老師把 M 值告訴了小明,把 N 值告訴了小強,張老師問他們知道他的生日是哪一天嗎? 3 月 4 日,3 月 5 日,3 月 8 日6 月 4 日,6 月 7 日9 月 1 日,9 月 5 日12 月 1 日,12 月 2 日,12 月 8 日 小明說:如果我不知道的話,小強肯定也不知道。 小強說:本來我也不知道,但是現在我知道了。 小明說:哦,那我也知道了。 請根據以上對話推斷答案。 解答首先我們知道兩個基本的推論方式, 在可能的日期當中,若有日期的月是只出現一次時,小明可以在只知道 M 的情況下知道答案。 在可能的日期當中,若有日期的日是只出現一次時,小強可以在只知道 N 的情況下知道答案。(例如 N = 7 時,只有 6 月 7 日的可能) 接著我們可以開始進行推論: 依據小明的說法,他篤定小強不知道,這個意思是該月份 M 不會落在可以用推論 B 得到答案的月份,也就是該月不含日只出現一次的日期 (6 月 7 日和 12 月 2 日),所以可以刪除 ...
樹的走訪 (Tree Traversal)
簡介透過一些演算法能夠對樹狀結構的節點進行逐一的訪問,可以應用在搜索、序列化或其他的用途上。依據走訪的方式,大致上可分為以下兩大類: 深度優先 (Depth-first)深度優先又分為三種走訪方式,而一般樹和二元樹以下分開來討論: 一般樹 前序 (Pre-order) 訪問根節點 訪問所有子樹 上圖的走訪順序為:ABDEFHCG 中序 (In-order) 訪問第一個子樹 訪問根節點 訪問其他子樹 上圖的走訪順序為:DBEHFAGC 事實上一般樹的情況下,中序走訪並不實用。 後序 (Post-order) 訪問所有子樹 訪問根節點 上圖的走訪順序為:DEHFBGCA 二元樹 前序 (Pre-order) 訪問根節點 訪問左子樹 訪問右子樹 上圖的走訪順序為:ABDECFG 中序 (In-order) 訪問左子樹 訪問根節點 訪問右子樹 上圖的走訪順序為:DBEAFCG 後序 (Post-order) 訪問左子樹 訪問右子樹 訪問根節點 上圖的走訪順序為:DEBFGCA 廣度優先 (Breadth-first)廣度優先又可以稱為 Level-order,將每一 ...
圖解 offsetLeft、offsetTop、offsetWidth 和 offsetHeight
本文將透過圖解的方式說明 CSSOM View Model 中 HTMLElement 定義的屬性,包含 offsetLeft、offsetTop、offsetWidth、offsetHeight 和 offsetParent。 JavaScript 中可以由 Element 的 DOM 物件中使用 offsetLeft、offsetTop、offsetWidth 和 offsetHeight 的屬性,其中 offsetWidth 和 offsetHeight 的意義可以用下面這張圖說明: offsetWidth唯讀。表示 Element 佔用的寬度除去 magin 的部分。也可以用數學表示: 1offsetWidth = width + padding + border offsetHeight唯讀。表示 Element 佔用的高度除去 magin 的部分。也可以用數學表示: 1offsetHeight= height+ padding + border offsetLeft唯讀。表示 Element 左邊距離與 offsetParent 左邊界距離,有以下四種情況: offse ...
圖解 scrollLeft、scrollTop、scrollWidth、scrollHeight 和 scrollIntoView
本文將透過圖解的方式說明 CSSOM View Model 中 Element 定義的屬性,包含 scrollLeft、scrollTop、scrollWidth、scrollHeight 和 scrollIntoView。 JavaScript 中可以由 Element 的 DOM 物件中使用 scrollLeft、scrollTop、scrollWidth 和 scrollHeight 的屬性,這些屬性的意義可以用下面這張圖說明: scrollWidth唯讀。表示 Element 內容物實際上的寬度,scrollWidth 大於等於 clientWidth。 scrollHeight唯讀。表示 Element 內容物實際上的高度,scrollHeight 大於等於 clientHeight。 scrollLeft表示內容物捲動到的水平位置,由上圖可知表示可視區左邊界與內容物左邊界的距離;當捲軸在左邊時 (由右至左書寫),則為可視區右邊界與內容物右邊界的距離。可透過修改此屬性來捲動。 scrollTop表示內容物捲動到的垂直位置,由上圖可知表示可視區上邊界與內容物上邊界的距離。可透過 ...
圖解 clientLeft、clientTop、clientWidth 和 clientHeight
本文將透過圖解的方式說明 CSSOM View Model 中 Element 定義的屬性,包含 clientLeft、clientTop、clientWidth 和 clientHeight。 JavaScript 中可以由 Element 的 DOM 物件中使用 clientLeft、clientTop、clientWidth 和 clientHeight 的屬性,這些屬性的意義可以用下面這張圖說明: clientWidth唯讀。表示 Element 實際上可視的區塊寬度,也可以用數學表示: 1clientWidth = width + padding - 卷軸寬度 clientHeight唯讀。表示 Element 實際上可視的區塊寬度,也可以用數學表示: 1clientHeight = height + padding - 卷軸高度 clientLeft唯讀。由上圖可知表示可視區左邊界與 border 左邊界的距離,基本上相當於左邊 border 的寬度;當左邊有卷軸的時候 (書寫方向由右至左時可能會出現),則還要加上卷軸寬度。用數學表示: 由左至右1clientLeft ...
解決 Table './dbname/tablename' is marked as crashed and should be repaired when using LOCK TABLES
問題資料庫存取發生錯誤,例如使用 mysqldump 時出現: 1mysqldump: Got error: 145: Table './dbname/tablename' is marked as crashed and should be repaired when using LOCK TABLES 原因資料表的相關檔案由於不明原因發生損壞,而無法正常存取。 解決方案可以使用以下兩種方式嘗試修復資料表: 使用 SQL 語句1REPAIR TABLE tablename 使用 myisamchk使用命令列進入資料表所在目錄,例如 1cd /var/lib/mysql/dbname 執行 1myisamchk -r tablename 執行過程中可能會遇到以下錯誤 1myisamchk: error: myisam_sort_buffer_size is too small 這是修復過程中所需記憶體空間超過預設的空間,可以利用 --sort_buffer_size 參數指派更大的記憶體,例如: 1myisamchk -r tablename --sort ...
資料結構 - 一般樹轉二元樹
簡介在樹狀結構中我們可能會使用陣列或指標來表示子節點,然而許多的陣列或指標並沒有真的利用到,造成記憶體上的浪費。透過特定的儲存方式,能夠將各種樹都轉換成二元樹,就能有效解決這個問題。轉換的規則如下: 原節點的第一個子節點轉成二元樹中的左子節點 。 原節點的下一個兄弟節點轉成二元樹中的右子節點。 從圖形的角度來看也可以這樣說: 原節點的第一個指標指向第一個子節點。 原節點的第二個指標指向下一個兄弟節點。 轉換過程以下面這張圖為例: 左上角的圖表示原來的一般樹,從圖形的角度並以節點3為例,透過規則1將節點3的第一個指標指向第一個子節點,第一個節點我們簡單取最左邊的節點,為節點 1;透過規則 2 將節點 3 的第二個指標指向下一個兄弟節點,為節點 4。 其他以此類推,接著我們可以得到左下角的圖形,與原來的規則做對應我們可以知道,第一個指標指的就是二元樹的左子節點,第二個指標就是右子節點,所以依據左右子節點的位置重新調整圖形,最後可以得到右邊的徒刑,也就是轉換成二元樹的結果。 LCRS Tree從上面的轉換結果,我們可以知道這個二元樹的左子節點代表的是原來的第一個子節點,右子節點代表下 ...







