1樓:匿名使用者
先來一個比較簡單的
第一步先猜0001,2223,4445,6667,8889。既可判斷是那四個數比如1、3、5、0
第二步選一個沒有出現的數比如9,將它與前面四個中的一個組合,判斷其位置
比如1999,9199,9919可判斷1(前三個都不是就是第四個,下同)
第二個數需兩次,第三個需一次,剩下的是最後一個
這樣,最壞的情況只需11次,有點多,最大的優點是不需要動腦子
關於上述策略的改進
在第二步用兩個確定出現的數,比如0和1,以0001的方式輸入,有以下3種情況:
1a3b,0和1一定都不在第四位(因為這「1a」一定是0,如果是1,則0一定在前三位,會有2a,故1不在第四位,同樣因為「1a」是0,0也不是第四位。),這樣剩下兩個數一定有一個在第四位,剩下兩個數,比如2、3,以2232的方式輸入,如果3是第三位,則會顯示2a2b,否則是4b,這樣三四兩位就定下來了,再猜一次可以確定一二兩位的順序,9次一定可以猜對
2a2b,1一定是第四位,0一定不是第四位
4b,0一定是第四位,1一定不是第四位
上面兩種情況是等價的,第一次就可以確定一個數的位置,假設第四位是1,下一次猜0021,結果可能是3a1b,則結果是0321或3021,只需要再猜一次;或者2a2b,這是兩個0裡一定有一個是對的,2一定是錯的,所以第三位一定是3,結果是2031或0231,也只需要再猜一次;或者1a3b,這時0一定在第三位,結果是2301或3201,仍然只需要再猜一次
綜上所述,這種策略下,最壞的情況需要9次
進一步提高效率需要對各次的結果進行綜合,情況太多了,失去作為一種策略的意義
各位有高招歡迎指正~
2樓:161遊俠趙雲
首先強烈譴責"帝之魔王"的抄襲行為
這個問題,研究一下的確蠻有意思,下面是我的想法,不一定能解決問題,看可能可以給別人以啟發.我主要研究的是《在最壞情況下最少幾次猜中,策略如何?>
第一步,因為各個數都是一樣的,所以第一次輸入0123,現在輪到出題者,我相信沒人會給他a,頂多給他b,但是給他幾個b合理呢?
0b,下次猜到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,5中有一個;6,7,8,9中有一個.綜上,第2步,出題者給的是0a2b.
第三步,猜題者這一步,稍微聰明點,從4組數中分別去4個數,最起碼可以確定,3個數字.但是我們想,作為出題人,在6,7,8,9中,如果是一個數一個數猜,他肯定,會將最後一次猜的設為正確的以增加你猜題次數,也就是說,即使你從現在起,4步後,將6,7,8,9中正確數字的位置確定下來,也需要4步才能,將4個數字都確定.所以這種假設下,最少需要猜加上前面的兩步,共6步.
如果第三步猜2046.
出題人可以不給a就不給a的前提下,理智出題者給的應該是,0a1b為什麼給1b不給0b呢,如果給0b,那麼,猜題人就知道前三組數字中1,3,5是必對了,除了在確定a是比3b有優勢,其他地方沒優勢.而給1b而不給2b的原因也就在於,確定a的時候1b比2b更有優勢(猜題者更難猜)這樣對猜題者來說,是很麻煩的,因為,他不知道1b是哪個,這次作答幾乎對確定b沒有任何貢獻,所以,猜題者不應該出這些數字.如果前三組數字只出現1個,那麼不僅可以唯一確定這個數字所在組的b,而且對6,7,8,9中選b也有積極意義
現在總猜題情況為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.
如果給2a1b結果必然是9430,如果給3a0b,結果可能是9250和9340也需要兩步,最不好的情況就是要7步;如果9位置沒對,我相信,在兩步也能解出來.)只考慮這中情況,出題人就可以將你的步數限制到最少7步
如果第三步中,b是6,7,8中的一個,那麼,0肯定不是b了,1肯定是b,而出題者只用考慮b是在7,8中,還是6,很顯然,出題者會讓b在7,8中,所以給的答案是0a1b.總猜題情況為0123,4501,6078,7890
第五步8215,出題者0a2b
第六步5381,出題者
1a0b===>2741,
1a2b===>3751,5731
2a1b===>3481
3a0b===>4381.只有這四種情況,是由於受到前面的限制.這中結果也需要7步
我不保證自己證明的都很嚴密,但作為一個解題者,我的感覺是,解這個題目可以步數更少些(雖然我也不知道能不能再少),如果有人能以更少的步數解出,我也會崇拜之,但如果說解這題目要比七步多,我就不同意了,我是完全站在出題者的立場,為難猜題者的思路的假設下去,這也是最糟糕的情況,這也應該是步數最多的情況,如果**不清楚可以問我,或者你認為自己可以讓我7步內猜不出,可以找我試試
3樓:匿名使用者
我在文曲星上玩過,按我的方法不需要藉助草稿紙,99%8次都能出正確結果(我印象中好像有可能8次無法判斷),方法如下
1.先確定這4個數
2.然後確定數字的具體位置
具體方法舉個例子說方法,加入數字為8351
前7次分別猜0123、1234、2345、3456、4567、5678、6789
先做第一步
a.先不管到底是a還是b,只看每次有一個數字猜對了,即假如提示為xayb,則顯然該次猜測有x+y個數字對了。
b.從0123看0a2b有2個數字對了,假設是0和1,繼續看1234提示0a2b還是2個正確的,1234和0123比多了4少了0,那麼就應該有4,繼續看2345提示1a1b還是2個正確的,那就應該有5,此時4個數全了(0/1/4/5),用後面的驗證,發現4567提示0a1b,只有1個正確的,而如果是(0/1/4/5)則有2個。所以假設0和1是錯誤的,重新假設為0/2 0/3 1/2 1/3 2/3,重複剛才的推論,很快就能找到4個數字,說起來麻煩,其實自己做一便會發現很快,不用打草稿,只要在文曲星上前後翻就行,整個過程不會超過1分鐘。
2.確定了4個數字以後再來找位置,可以從第一個猜測0123看起,當然也可以選擇提示a比較多或者b比較多的猜測來比較,還是用假設的方法逐步推翻反證。
我猜整個過程不會超過2分鐘,方法不一定是最好,但是我覺得很好用
補充:寫完了自己的方法,看看前面的,想學習更好的方法,沒想到前面的人居然題目都沒看清,還什麼先猜0001,題目很清楚,4位數數字不重複,怎麼可能出現3個零?
而且還一群人抄襲這個答案,真是悲哀
4樓:敬初蘭
第一步先猜0001,2223,4445,6667,8889。既可判斷是那四個數比如1、3、5、0
第二步選一個沒有出現的數比如9,將它與前面四個中的一個組合,判斷其位置
比如1999,9199,9919可判斷1(前三個都不是就是第四個,下同)
第二個數需兩次,第三個需一次,剩下的是最後一個
這樣,最壞的情況只需11次,有點多,最大的優點是不需要動腦子
關於上述策略的改進
在第二步用兩個確定出現的數,比如0和1,以0001的方式輸入,有以下3種情況:
1a3b,0和1一定都不在第四位(因為這「1a」一定是0,如果是1,則0一定在前三位,會有2a,故1不在第四位,同樣因為「1a」是0,0也不是第四位。),這樣剩下兩個數一定有一個在第四位,剩下兩個數,比如2、3,以2232的方式輸入,如果3是第三位,則會顯示2a2b,否則是4b,這樣三四兩位就定下來了,再猜一次可以確定一二兩位的順序,9次一定可以猜對
2a2b,1一定是第四位,0一定不是第四位
4b,0一定是第四位,1一定不是第四位
上面兩種情況是等價的,第一次就可以確定一個數的位置,假設第四位是1,下一次猜0021,結果可能是3a1b,則結果是0321或3021,只需要再猜一次;或者2a2b,這是兩個0裡一定有一個是對的,2一定是錯的,所以第三位一定是3,結果是2031或0231,也只需要再猜一次;或者1a3b,這時0一定在第三位,結果是2301或3201,仍然只需要再猜一次
綜上所述,這種策略下,最壞的情況需要9次
5樓:
如果候選數字集為 。那麼這時猜 5617 和 5627 甚至是 5637 他們的效果都是一樣的。
這是因為 1, 2, 3 都在確定的位置,或者是未出現的,它會形成的 a 和 b 是固定的, ( 比如說,猜 5617 的話,1 所得到的一定是 b,猜 5627 的話 2 一定是 a )
不過要注意的一點是 4a0b 是比較特殊的情況。舉例來說,依照上面的推論猜 0125 和 0135 應該一樣好。因為 "2" 一定會形成 1a0b ,而 "3" 一定是 0a0b 。
可是 0135 並不在候選數字集內,但 0125 有 1/4 的機會。所以當要兩者等效時,以在候選數字集內者優先。
先試較好的猜法
我們根據 infomation gain 來排序所有可能的猜法,將最有 information gain 最大的猜法先作。如此一來,就可以較快得到比較好的答案(平均較小),同時利用子節點下界的來估計一節點的平均次數,如果其下界已超過目前所找到的最佳解,就不需要再嘗試了。我們愈快找到好的答案,就可以避免在不對的猜法上花太多的時間。
求幾個策略類遊戲,求推薦幾個策略類遊戲
全面戰爭系列不錯 經營自己的勢力 戰爭場面很給力 那我還是推薦你玩模擬城市吧 帶戰爭的還不行 或者自己度娘下文明5 求達人推薦幾個好玩的策略類的遊戲 地球帝國 太陽帝國 原罪 神話時代 十三世紀的死亡與榮耀。就這些了。求推薦幾個有關二戰的策略遊戲?突襲1,2,3,英雄連,戰爭之貌,斯大林格勒,軸心與...
天之痕中猜數字遊戲,軒轅劍天之痕猜數字遊戲(雷夢澤)的答案是什麼?
軒轅劍3天之痕中,除了主線任務,還有不少支線任務。在雷夏澤的師伯家外,陳靖仇會遇到一個名叫公山夢的小女孩。她是師伯的孫女,和她對話,她會和你玩個猜數字的遊戲,猜對後,她會送你一瓶不老之泉水,可以提高生命力上限。猜數字玩法簡介 小女孩要你猜 對話,然後輸入4個數字 如果數字的位置和字號都正確則會報陽,...
c 程式設計 猜數字遊戲,c 程式設計 猜數小遊戲
include include include using namespace std void main 比較判斷。int count 0,correct 0 int c 4 用來儲存數值正確的數字。int d 4 用來儲存位置和數值都正確的數字。for i 0 i 4 i for j 0 j 4...