「然後該程序將生成一個與我的組合相同長度的隨機列表」 - 這是問題的一部分嗎?你稍後說,該程序使用你的提示,所以我假設你正在生成隨機數字列表,試圖找出密碼,同時只使用隨機的數字列表,而不是使用你必須做的更好的猜測信息,可以縮小更快地取得成果。
在這種情況下,您需要跟蹤您的猜測,併爲每個人猜出您可以從中收集哪些信息。每次您從猜測中獲得新信息時,都可以返回之前猜測的結果並查看是否獲得任何新信息。對於你的榜樣,讓我們說這是這樣的,包括第一後我由猜測:
PASSWORD: [2,2,4,5,1,1]
GUESS 1: [1,2,5,5,4,3] - 4 correct, 2 right position
GUESS 2: [5,2,1,7,3,8] - 3 correct, 1 right position
GUESS 3: [7,7,8,3,7,9] - 0 correct, 0 right position
GUESS 4: [5,6,5,3,8,9] - 1 correct, 0 right position
GUESS 5: [8,2,5,6,7,3] - 2 correct, 1 right position
猜測3之後,你知道你有沒有3S,7S,8S或787-9。回到第二個猜測,你知道三個數字是1,2,5,因爲你沒有3,7,8。回到你的第一個猜測與知識,你知道答案有1,2,5以及4或5.看看第4猜你現在知道只有一個5,所以你的四個數字是1 ,2,4,5。繼續使用這個算法,直到找出所有6個數字,而不是關心他們位於什麼位置。
一旦你有全部6個數字,你就可以切換算法來找出數字的位置。猜測每次你學習新的信息,並繼續猜測隨機密碼,如果你卡住了。對於初始運行,由於猜測,你知道5不在位置1或3中。猜測2 - 你知道5不在位置1,所以2或1在正確的位置[X, 2,1,X,X,X]。猜測1你知道5不在位置3,因此以下2個位於正確的位置:[1,2,X,5,4,X]。猜測5告訴你,無論是2還是5都處於正確的位置,但由於猜測4,你知道5處於錯誤的位置,所以現在你知道2在位置2了。將這個信息與猜測2相結合你的1也不在位置3,所以你知道它必須是4或2.
表示你的知識的一種方法是將數組的最小和最大計數爲每個數字和一個布爾數組每個地方都告訴你哪些數字可以到達那裏。一旦獲得了猜測中的所有信息,就可以將其從列表中刪除,因此不必再次查看。因此,在猜測3之後,最大數量3,7,8,9爲0.您也可以將這些可能性設置爲每個位置爲假。這就是你可以得到的所有信息,所以你不必再看看猜測3.
你也可以改變猜測來簡化它,例如一旦你知道2進入位置2並且沒有3 ,7,8,你可以刪除那些「的已知,」你猜2點的變化:
GUESS 2: [5,2,1,7,3,8] - 3 correct, 1 right position
NEW 2: [5,X,1,X,X,X] - 2 correct, 0 right position
但是,一旦你知道所有的數字和已成立5爲false位置1和1爲false位置3,這樣可以給你更多的信息,你可以從你的列表中刪除這個猜測。
有一個完全符合以下規則的遊戲:Mastermind(https://en.wikipedia.org/wiki/Mastermind_%28board_game%29)。本文還提供了幾種解決遊戲的方法。 – Paul
是的,在主腦中,如果你在正確的地方得到了正確的顏色,它會告訴你它到底在哪裏。所以你知道哪一個是正確的。我的問題有點複雜,因爲我只知道有多少是正確的,但我不知道哪一個或哪個位置。但是,謝謝你的回答。之前對這個遊戲一無所知。 – JamesLinux
不,這正是我需要的。 – JamesLinux