1 / 9

小型專題 1A2B 猜數字遊戲

小型專題 1A2B 猜數字遊戲. 鄧姚文 http://www.ywdeng.idv.tw. 遊戲規則. 遊戲雙方:甲方為使用者,乙方為電腦 乙方於 0,1,2,3,4,5,6,7,8,9 等十個數字之中,隨機不重複地選擇三個數字,任意排列其順序,然後秘藏之。 甲方試圖以最快的速度猜出乙方秘藏的三個數字包括其順序。. 遊戲規則. 甲方每次提出三個數字挑戰乙方 乙方以甲方提出之數字比對秘藏之數字,並以 nAmB 之編碼方式回應甲方, n+m≤3 A 表示數字相符而且位置也相符 B 表示數字相符但位置不相符. 遊戲規則. 例如,乙方秘藏之數字為 385

Download Presentation

小型專題 1A2B 猜數字遊戲

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 小型專題1A2B猜數字遊戲 鄧姚文 http://www.ywdeng.idv.tw

  2. 遊戲規則 遊戲雙方:甲方為使用者,乙方為電腦 乙方於0,1,2,3,4,5,6,7,8,9等十個數字之中,隨機不重複地選擇三個數字,任意排列其順序,然後秘藏之。 甲方試圖以最快的速度猜出乙方秘藏的三個數字包括其順序。

  3. 遊戲規則 • 甲方每次提出三個數字挑戰乙方 • 乙方以甲方提出之數字比對秘藏之數字,並以nAmB之編碼方式回應甲方,n+m≤3 • A表示數字相符而且位置也相符 • B表示數字相符但位置不相符

  4. 遊戲規則 • 例如,乙方秘藏之數字為385 • 若甲方猜246則乙方回答0A0B,因為沒有任何一個數字相符 • 若甲方猜123則乙方回答0A1B,因為3為數字相但位置不相符 • 若甲方猜345則乙方回答2A0B,因為3和5不但數字相符,而且位置也相符 • 若甲方猜135則乙方回答1A1B,因為數字相符者有3與5,但是3的位置不相符,而5的位置相符 • 若乙方的回應為3A0B,即表示甲方已經猜出乙方秘藏之數字。

  5. 如何產生隨機亂數? • Math.random() 隨機傳回一個介於0與1之間的浮點數,包括0但不包括1,亦即[0..1) • 隨機產生一個介於[0..9]的數字: • int n = (int)(Math.random() * 10);

  6. 如何從0,1,2,3,4,5,6,7,8,9之中不重複地選出三個數字?如何從0,1,2,3,4,5,6,7,8,9之中不重複地選出三個數字? • 先建立一個長度為10的整數陣列 • 設定陣列元素初始值: • 陣列第一個元素為0,第二個元素為1,第三個元素為2,…,第10個元素為9 • 針對陣列內的每一個元素 x 執行下列步驟 • 產生一個介於[0..9]的隨機亂數 r • 令 y 為陣列的第 r+1 個元素(陣列索引值為r的元素) • 將 x 與 y 的內容對調 • 取出陣列的前三個元素,依序裝入陣列 S • 陣列 S 即為所需之三個不重複的隨機亂數。

  7. 如何比對數字並回應nAmB ? • 將甲方提出的三個數字依序裝入陣列C之中 • 令 A 值為 0,B 值也為 0 • 針對陣列C之中的每一個元素 t 執行下列步驟: • 在陣列 S 中搜尋 t • 若在陣列 S 內發現 t 則 • 若 t 位於 S 內的位置與 t 位於 C 內的位置相同,則 • A 加 1 • 否則 • B 加 1 • 回應甲方A與B的值

  8. 如何在一個陣列內搜尋特定值? • 若在陣列內發現目標值,則傳回目標值在陣列內的位置,否則傳回 -1 • 令 p 值為 -1 • 以一個迴圈將陣列從頭到尾掃描一遍 • 若在陣列內位置 k 處發現目標值,則令 p = k 並且立即終止迴圈 • 傳回 p 值

  9. 如何處理輸入? • 甲方輸入 098 時應如何處理? • 將字串拆成三個數字,以整數陣列的形式儲存以便比對 • String.substring(int beginIndex, int endIndex)可取出字串之中的一小段(子字串) • 例如 • String line = "098"; • line.substring(0, 1) 將傳回 "0" • line.substring(1, 2) 將傳回 "9" • line.substring(2, 3) 將傳回 "8"

More Related