求一猜數字遊戲的思路,求猜數字遊戲的策略

時間 2022-05-02 23:30:05

1樓:匿名使用者

#include #define nxn 123 /*要猜的數值*/ int main() else if(nxn < n) else if(nxn == n) a = 0; } else printf("請正確輸入:"); } printf("對了,拜拜!"); return 0;}

2樓:匿名使用者

1.先生成一個隨機數2.系統提示請輸入一個數字猜測;3.

判斷此數字是否與生成的隨機數相等,若相等提示猜對了,若小了,提示猜小了,若大了,提示猜大了,4.進行迴圈,一直到提供可以猜測的次數為止(假設猜10次),當猜了10次還沒有才對,提示你失敗了,結束程式

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樓: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步內猜不出,可以找我試試

6樓:敬初蘭

第一步先猜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次

7樓:

如果候選數字集為 。那麼這時猜 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 最大的猜法先作。如此一來,就可以較快得到比較好的答案(平均較小),同時利用子節點下界的來估計一節點的平均次數,如果其下界已超過目前所找到的最佳解,就不需要再嘗試了。我們愈快找到好的答案,就可以避免在不對的猜法上花太多的時間。

求四對三跟一五?猜數字,三加四五猜數字1至49是那個

僑中黃建成 求四對三跟一五?猜數字 答案 26。對 du 造字法 會意 從又 從寸 基本字義 1.答,答話,回答 答如流。無言以 2.朝著 酒當歌。3.處於相反方向的 面。4.跟,和 他商量一下。5.互相,彼此相向地 立。流。接。稱 ch n 峙。6.說明事物的關係 於。這事有意見。7.看待,應付 ...

c語言程式設計 猜數字遊戲?

提問 求這個程式設計。include include 為了獲得隨機數 include 獲取時間main printf 恭喜你猜對了!好,上面的程式基本功能能用,但是程式整體不是很美觀,缺少提示語句,所以我們加上提示語句。if b a printf 你輸入的數值太大。if b 好了我們現在將完整的 寫...

猜數字 日無邊際打一數字?猜數字 日無一邊

日無邊際打乙個數字是5。漫無邊際 m n w bi n j 漫無邊際,漢語成語,拼音是m n w bi n j 意思是形容非常廣闊,一眼望不到邊 也指談話或寫文章沒有中心,離題很遠。出自 北洋軍閥統治時期史話 答 日無邊際,我猜數字是 因為日的形象數字就是,如果把數字當做跑道來看就是日無邊際沒有盡頭...