先說個簡單點的。
第壹步,猜0001,2223,4445,6667,8889。可以判斷是那四個數字,比如1,3,5,0。
第二步,選擇壹個沒有出現的數字,比如9,結合前四個中的壹個,判斷其位置。
比如1999,9199,9919可以判斷1(前三個都不是第四個,下同)。
第二個數需要兩次,第三個數需要壹次,剩下的就是最後壹個。
這樣最差的情況只需要11次,有點多。最大的好處就是不需要動腦子。
對上述策略的改進
第二步,以0001的形式輸入0和1兩個確定的數字。有如下三種情況:
1A3B,0和1壹定不在第四位(因為“1A”壹定是0,如果是1,那麽0壹定在前三位,會有2A,所以1不在第四位,也是因為“1A”是0。),這樣剩下的兩個數中壹定有壹個在第四位,剩下的兩個數,比如2和3,以2232的形式輸入。如果3是第三位,則顯示2A2B,否則顯示4B,這樣三位、四位、兩位就結算了。再猜壹次,就能確定壹、二、二位數的順序,肯定能猜對九次。
2A2B,1壹定是第四位,0壹定不是第四位。
4B,0壹定是第四個,1壹定不是第四個。
以上兩種情況是等價的,第壹次就可以確定壹個數的位置。假設第四位是1,下次猜0021,結果可能是3A1B,那麽結果就是0321或者3021,只需要再猜壹次。或者2A2B,兩個零壹定有壹個是對的,2壹定是錯的,所以第三位壹定是3,結果是2031或者0231,妳只需要再猜壹次;或者1A3B,那麽0壹定在第三位,結果是2301或者3201,仍然只需要再猜壹次。
綜上所述,在這個策略下,最壞的情況需要9次。
為了進壹步提高效率,需要綜合每次的結果。這種情況太多了,它就失去了作為戰略的意義。
研究這個問題真的很有意思。以下是我的想法,不壹定能解決問題,但可能會啟發別人。我的主要研究是<最壞情況下至少有幾個猜測,策略是什麽?& gt
第壹步,因為所有數字都壹樣,我第壹次輸入0123,現在輪到提問者了。我相信沒有人會給他A,最多B,但是給他幾個B合理嗎?
下壹次猜測B的期望。E=4*4/6=8/3。
1B,E=1*1/4+3*3/6=7/4
2B,E=2*2/4+2*2/6=5/3
3B,E = 3 * 3/4+1 * 1/6 = 29/12
4B,E=4作為提問者,我希望對手猜B的期望值最小,所以我選擇給他2B。
第二步,輸入4501,又輪到提問者了。現在問題變得復雜了。
我覺得4501可以分為45和01兩部分,其中45是新的,按照上面的方法繼續做。
0B,E = 2 * 2/4 = 1;
1B,E = 1 * 1/2+1 * 1/4 = 3/4;
2B,E = 2 * 2/2 = 2;所以提問者會在45中給出1B。
其實復雜的部分是01,因為涉及到A部分,我只能假設提問者只有在不得不給出A的情況下才給出A,如果是意料之中的,我已經很困惑了,所以我就簡化壹下,我覺得這個假設不壹定不合理。從給B,我們也可以遵循開始的想法
0B,E=2*2/2=2
1B,E = 1 * 1/2+1 * 1/2 = 1
2B,E=2*2/2=2
所以01會給出壹個b,現在提問者知道0中的1,1;2和3中的壹個;4,五分之壹;6,7,8,9各有壹個。綜上,第二步,提問者給的是0A2B。
第三步,提問者聰明壹點。不要從四組中分出四個數,至少可以確定三個數。但我們認為,作為提問者,如果妳在6、7、8、9中壹次猜中壹個數字,他壹定會將最後壹次猜中的數字設為正確,以增加妳的猜對次數,也就是說,即使妳從現在開始猜,
在提問者不能給A的前提下,理性的提問者應該給,0A1B,為什麽不給0B給1B?如果給了0B,那麽提問者就知道前三組數中的1,3,5壹定是對的,除了A優於3B,其他地方沒有優勢。在確定A時,1B比2B更有優勢(提問者更難猜到),這對於提問者來說很麻煩,因為他不知道1B是哪個,這個答案幾乎對確定B沒有貢獻,所以提問者不應該給出這些數字。如果只有1的數出現在前三組,那麽不僅可以唯壹確定這個數所屬的組。
現在總猜情況是0123,4501,所以第三步是6078。
問題越來越復雜了。對於0,可以給B也可以不給,對於6,7,8,可以給B也可以不給。0B,1,9肯定是B;2B,1肯定是B,6,7,8之間肯定有B,但是如果給1B,就需要猜這個B是哪裏來的,增加了猜的難度,所以提問者給0A1B。
第四步:現在總的猜測情況是0123,4501,6078。和之前壹樣分析完了,我受不了了,就說壹下我的猜測策略。第四步:7890。
如果第三步B為0,那麽提問者應該給出答案1A1B。
(按照這個假設,總的猜測情況是0123,4501,6078,7890。現在我們知道0的位置已經確定,9確定為b .第五步:9240。如果9的位置是對的,那麽如果給2A0B,結果壹定是9350。如果給2A65438。如果9的位置不對,相信兩步就能解決。)只考慮這種情況,提問者可以把妳的步驟限制在至少7步。
如果在第三步中,B是6,7,8中的壹個,那麽0肯定不是B,1肯定是B,提問者只需要考慮B是在7,8還是6中。很明顯,提問者會在7,8中做出B,所以給出的答案是0A1B。總的猜測情況是065433。
第五步:8215,提問者0A2B。
第六步:5381,提問者
1A0B = = = & gt;2741,
1A2B = = = & gt;3751,5731
2a 1B = = = & gt;3481
3A0B = = = & gt4381.只有這四種情況是因為之前的限制。結果也需要7個步驟。
我不保證我已經嚴格證明了壹切,但是作為壹個解題者,我的感覺是我可以用更少的步驟解決這個問題(雖然我不知道我能不能少做壹點)。如果有人能少走幾步就解決了,我就拜了,但如果是七步以上,我就不答應了。我完全處於解題者的位置,這也是猜測者思維最難的假設。
有什麽高明的想法歡迎指正~
如果妳想玩,可以用我的QuickBasic程序。
隨機化定時器隨機化
Cls的清晰屏幕
Dim a(4),b(4)'定義數組。
10a = int(RND * 9000)+1000 '得出壹個數。
Aa = a '體雙變量
A$ = Mid$(Str$(a),2)'刪除前導空格。
對於i = 4到1步-1 '這種循環截斷。
a(i) = a模10
a = a \ 10
然後
對於i = 1到3 '這個循環確定是否有重復的數字。
對於j = i + 1到4
如果a(i) = a(j)那麽10 '如果有重復的數字,復制它們。
下壹個j,我
對於I = 10到1步-1 '有十次機會。
s = 0“A”次清除。
v = 0“B”次清除。
還有多少機會可以打印?
20輸入“輸入a號”,b '輸入妳的號碼。
如果b = 0則打印“答案是”;Aa:如果直接回車顯示答案,遊戲同時結束。
對於j = 4到1步-1 '截斷
b(j) = b mod 10
b = b \ 10
然後
對於j = 1到3
對於k = j + 1到4
如果b(j) = b(k)那麽20 '如果有重復的數字,重新輸入。
下壹個k,j
對於j = 1到4
如果a(j) = b(j)那麽s = s+1 '如果滿足條件,“a”加1。
然後
對於j = 1到4 '求“b”的個數
B $ = mid $ (str $ (b (j)),2)'去掉第壹個“0”。
Z = Instr(a$,b$)'在妳的數字中找到相同的數字。
如果z & lt& gt0和a(z)& lt;& gtB(z)然後v = v+1 '找到“b”
數量
然後
如果s = 4,則打印“妳是對的!”:End '如果“a”= 4表示沒事,結束遊戲。
打印s;“壹”;五;“B”打印“A”和“B”的號碼
然後
打印“對不起,妳輸了!”沒猜到,結束。
結束
如果沒有QB,去www.iteroom.cn下載
謝謝妳