看板 C_Sharp 關於我們 聯絡資訊
※ 引述《meteor009 (椰子)》之銘言: : 已爬文 : 玩法:電腦猜數字(4位數,數字不重複) : 使用者給幾A幾B : 我的做法: : 一開始把電腦可能的答案(0123~9876,去除中間重覆的數字)存到一個陣列裡 : ↑使用list<String> : 第一次隨便Random一個出來,然後使用者給?A?B : 接著就出現問題了...Orz : 我不知道該怎麼讓電腦根據使用者給的?A?B去可能的答案陣列中剔除不符合的數字 : 然後再從剩餘的數字陣列中Random出一個數字作為答案 : 麻煩板上的高手大大救救我 T___T : 先感謝大家了~ 如果要先產生10*9*8*7個判斷資料,卻在其中只用到幾筆,很浪費啊. 電腦猜數字,過程為: guess.1: 1234 -> match.1: 1A1B guess.2: 5678 -> match.2: 0A1B ...... guess.k: ooxx -> match.k: xxoo 我們用guess.i代表guess.1到guess.k的任何一項,相對它,有一個match.i. 電腦該拋出哪個guess.(k+1)呢? 電腦拋出guess.(k+1),是希望guess.(k+1)得到4A0B. 如果guess.(k+1)是4A0B,則guess.i與guess.(k+1)比較,必定得到match.i! 所以, 規則一: 電腦亂數取四個數字,檢查這一組與每個guess.i比較,都會得到match.i. 如果通過檢查,這四個數字就可以拋出去做guess.(k+1). 是簡單的方法. 另外有一條規則: 規則二: 如果match.i是0A0B,則將guess.i四個數字排除在可參與亂數的數字之外. 這樣做會比較容易. 祝好運. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.160.208.90 ※ 編輯: yauhh 來自: 218.160.208.90 (12/15 19:37)
liaommx:原po的想法比較像是人工智慧的想法. 12/16 02:03
liaommx:簡單的猜數字解程式的想法,則是消去法 12/16 02:03
liaommx:可是消去法會有一個小問題..就算找出0a0b的四個數字 12/16 02:03
liaommx:剩下的6個數字,只能湊出2個0a0b..所以必須用case方式去解 12/16 02:04
liaommx:先找出4個0a0b數字,隨便抽兩個出來,和剩下數字做排列. 12/16 02:04
liaommx:找出另2個0a0b數字...那麼最後的4個數字就是0a4b... 12/16 02:05
liaommx:去做排列就是4a0b了 12/16 02:05
yauhh:那些額外的規則當然要自己想囉,不是什麼方法都包山包海 12/16 02:48
yauhh:可能是計分法,2A1B給一種分數,2A2B給一種分數,然後比哪個數 12/16 02:50
yauhh:優先. 挑數字的策略複雜,程式就不好寫;程式好寫,程式就笨. 12/16 02:51
yauhh:還有,這可不是人工智慧,而是這個問題的基本推理. 12/16 03:43
liaommx:給分數..我想想... 12/16 09:44
yauhh:我說策略複雜是指同一程式前後綜合多種策略,猜數字可能要練 12/16 09:45
liaommx:這的確不能說是人工智慧,我的想法有點錯了. 12/16 09:46
yauhh:習這種複雜性. 第一組數字拋亂數,第二組開始與前一組記錄比 12/16 09:46
liaommx:因為AI可以學習,但是這程式只到猜出為止.. 12/16 09:46
yauhh:較,並且如果遇到0A0B要把亂數範圍縮小,而對付其他的?A?B就要 12/16 09:47
yauhh:對可參與的每個數字加分數,選分數高的. 選出分數高的數字 12/16 09:48
yauhh:還要試一下調換排列順序. 好幾種事情可以在二步之間考慮好.. 12/16 09:49
yauhh: 對啊,這不是人工智慧,只不過是把人類智慧寫成程式而已. 12/16 09:50
Elly:這個流程都可以算是寫規格書了~不算在寫程式了 12/16 23:37