導航:首頁 > 源碼編譯 > 24點問題演算法

24點問題演算法

發布時間:2022-08-08 15:49:06

『壹』 24點計算方法與技巧

24點的竅門如下:

一、乘法解決(4×6=24、3×8=24、2*12=24)

把牌面上的四個數想辦法湊成3和8、4和6、2和12,再相乘求解。

如3、3、6、10可組成(10—6÷3)×3=24等。

又如2、3、3、7可組成(7+3—2)×3=24等。

實踐證明,這種方法是利用率最大、命中率最高的一種方法。

二、加減法:(25-1=24、27-3=24、28-4=24、30-6=24)

把牌面上的四個數想辦法湊成上述幾個減法的減數和被減數。

三、利用0、11的運算特性求解。

如3、4、4、8可組成3×8+4—4=24等。又如4、5、J、K可組成11×(5—4)+13=24等。

計算24點是一種智力游戲,竅門也是因人而異。在計算24點時,應從最簡便的運算開始考慮,逐步利用加減乘除等運算方法,把它們巧妙結合,換算出利於算出24的相關數字組合,這樣的思路就是所謂的竅門。

『貳』 24點的演算法技巧

1、利用3×8=24、4×6=24求解。

把牌面上的四個數想辦法湊成3和8、4和6,再相乘求解。如3、3、6、10可組成(10—6÷3)×3=24等。又如2、3、3、7可組成(7+3—2)×3=24等。實踐證明,這種方法是利用率最大、命中率最高的一種方法。

2、利用0、11的運算特性求解。

如3、4、4、8可組成3×8+4—4=24等。又如4、5、J、K可組成11×(5—4)+13=24等。

3、在有解的牌組中,用得最為廣泛的是以下六種解法:(我們用a、b、c、d表示牌面上的四個數)

①(a—b)×(c+d)

如(10—4)×(2+2)=24等。

②(a+b)÷c×d

如(10+2)÷2×4=24等。

③(a-b÷c)×d

如(3—2÷2)×12=24等。

④(a+b-c)×d

如(9+5—2)×2=24等。

⑤a×b+c—d

如11×3+l—10=24等。

⑥(a-b)×c+d

如(4—1)×6+6=24等。

(2)24點問題演算法擴展閱讀

乘法是加法的簡便運算,除法是減法的簡便運算。

減法與加法互為逆運算,除法與乘法互為逆運算。

整數的加減法運演算法則:

1、相同數位對齊;

2、從個位算起;

3、加法中滿幾十就向高一位進幾;減法中不夠減時,就從高一位退1當10和本數位相加後再減。

加法運算性質

從加法交換律和結合律可以得到:幾個加數相加,可以任意交換加數的位置;或者先把幾個加數相加再和其他的加數相加,它們的和不變。例如:34+72+66+28=(34+66)+(72+28)=200。

『叄』 24點游戲演算法

看了N個24點的源碼了,雖然都能正確的得到結果,不過從效率和智能上來說都很垃圾。(國內的程序員,大多也就是在源碼基礎上改改而已,這也是企業追逐經濟利益的趨勢。真正寫底層演算法的高手就沒多少了。。。如果A*,8皇後和跳馬的演算法對你來說沒什麼難度,可以嘗試寫下。很多人應該可以略過看下面的內容了,或者只看不思考,免得傷腦筋)。 這些演算法的通病,也正是我目前想解決的問題是:1 效率性把24點擴展一下,就是要寫一個函數。function fun(arr:Array,num):Array{ //arr參數為[a,b,c,d,e....] //N個數字,在24點游戲里,為[a,b,c,d] 4個數 //num //要匹配的結果 24點游戲里,num=24 return Array //輸出結果存在數組里,如["(3+3)*(2+2)","(3*2+2)*3".........]}如果是N個數字的計算,用N來計算程序的復雜度。那麼24點的很多演算法是屬於窮舉排列,無法擴展,並且重復計算量很多。沒效率可言2 結果的正確性這個也能說明為什麼連把公式窮舉出來,作為類似索引表的這樣典型空間換時間的方法,效率還是很低。這里還涉及到一點智能問題。
AI很難識別相同的運算。
如 a+b+c+d 和 a+c+b+d 按游戲規則來說屬於同種方法 但是在很多方法里,會得出重復的,如同時會輸出 ((a+b)+c)*d 和 ((a+c)+b)*d這樣同樣的公式。在我們玩24點撲克游戲時,這點明顯是不允許的。雖然24點這游戲並不是那麼嚴謹,但是有這樣的潛規則 在別人講他的演算法時,如果你馬上能想出同樣能算出24的不同類的方法,可以視為平手 如 2*4*(4-1) 和 (4+4)*(2+1) 可以視為不同的演算法。 特殊情況,當牌有點數相同的,花色不同時, 相同點數的位置替代,也應屬於同類運算,但是沒有一個代碼能夠識別這些的。 另外(8-(1+3))*6 和 (8-1-3)*6 理應屬於同種演算法。在程序中理應執行一遍,並且也只屬於(8-1-3)*6這種括弧數較少的公式才合理。 程序一次是只能計算兩個數的運算的。用遞歸回溯的思路,可以方便的遍歷所有的執行順序和符號組合。但是實際寫起來,在程序中,用條件判斷,剔除種種不必要的運算和生成簡捷正確的公式,難度非常大。另外就是遞歸的層級相當多,代碼設計難度也很大。 這個程序執行所費的時間,花在公式上的存儲讀取時間和條件判斷所花費的時間也是相當可觀的。3 智能性 還是回到24點來說了。擬人的思路。 當我們玩24點的游戲,很多時候,大家都不願意多看,馬上要求換牌。比如說A,A,2,2。在程序里可以這樣解釋,if(a*b*c*d<24){return} 牌太小了不可能有計算結果。 這時我們換了一張牌,結果大家都搶著報自己的答案了。為什麼能這么快呢?這和人工智慧里的學習記憶機制掛點鉤。人算時,並不會像通常的程序那樣去排列組合,直到得到滿意的結果為止。而是有很多優先的成分。比如說4張牌裡面,有一張牌是3,那麼,我們馬上會想到的是把其它3張牌組合成8。而如果裡面有張牌是4,我們會想到把其它3張牌組合成6。而且24點這游戲一般兩人玩,手動出牌也很難保證4張牌同時出。不同人的注意力也集中在不同地方。就生成了一個優先度的問題。 如上所訴,那麼在計算24點的程序里,如果a,b,c,d裡面,有數字=2,3,4,6,8,12這樣的12的因數在裡面,我們一般應該將這樣的數字放在最後去計算,優先組合其它的3個數字。如果數字在數組的位置和優先計算有關系的話,即是 for(var i in arr){ if(arr[i]==24的因數){ arr.push(arr.splice(i,1)) } } 如果要換其中某一張牌時,這時我們其實已經將其他3張牌的種種排列組合已經計算好了。只能與換的那種牌組合了。如果其他3張牌組合好了與第4張牌在一起並不能得到結果,那麼也並不代表無解。只是這種方法行不通。那麼應該拋棄這樣的組合方式,並重新計算(從效率上來說,等同於這樣的演算法不需要再計算,程序的表達上,這點也較有難度)。 人腦計算時,如果4張牌裡面有相同的牌的話, 如果相同的牌不是24的因數,通常是優先把這樣的牌給計算掉,假設4張牌為[a1,b1,c,d](後接數字,數字相同的代表數值相等),那麼一般會先這樣拆 (a1?c)?(b1?d) ,把相同的牌盡量和其他的牌組合,生成24的因數。如 5,5,3,2 這樣的牌,我們會馬上反映出 5+3=8 5-2=3 3*8=24,那麼換成程序來說,4張牌的優先順序可能為[a1,c,b1,d],當a1,c經過計算得到新值e時,排列為[b1,d,e] 如果相同的牌是24的因數。那麼我們可能會保留一個,並計算其他3張能否湊成另一個需要的因數。如牌8,8,2,3 我們會優先計算 8*(8-2-2)。而程序上來說,4個數的優先程度是[a1,c,d,b1]上面只分析了部分常見情況,細分下來非常多,並且在程序里實現起來有點難度。不過如果分得很細了。條件判斷所用的時間視為0。而每次擬人的計算過程用setInterval(時間周期模擬人腦的一個計算周期),而不是簡單的for來算的話。可能那個24點的程序就很完善了。輸入一些參數,設置能模擬出不同的人在牌放置的位置時,計算所用的時間。如果下一次的4張牌剛好和上盤的4張牌一樣或重復了3張優先計算的牌,就會像人一樣馬上靠回憶而不是計算得出結果。 24點的撲克游戲,一個很簡單的游戲,如果想復雜了,也是個不得了的東西。
這樣可以么?

『肆』 二十四點演算法是什麼

先取三個數,使它的結果為24,容易想到2×7+10=24,這樣一來,由此構造一個帶分數,使它含有2、7、10這個分數,2或這個帶分數乘以7其結果為24,列式為(2+10÷7)×7=24

『伍』 24點計算方法與技巧

隨便四個數字,計算24點技巧如下:
1、利用3×8=24、4×6=24、12×2=24求解. 把牌面上的四個數想辦法湊成3和8、4和6,再相乘求解.如3、3、6、10可組成(10-6÷3)×3=24等.又如2、3、3、7可組成(7+3-2)×3=24等.實踐證明,這種方法是利用率最大、命中率最高的一種方法.。
2、利用0、11的運算特性求解. 如3、4、4、8可組成3×8+4-4=24等.又如4、5、J、K可組成11×(5-4)+13=24等。
3、在有解的牌組中,用得最為廣泛的是以下六種解法:(我們用a、b、c、d表示牌面上的四個數)
3.1、(a-b)×(c+d) 如(10-4)×(2+2)=24等;
3.2、(a+b)÷c×d 如(10+2)÷2×4=24等;
3.3、(a-b÷c)×d 如(3-2÷2)×12=24等;
3.4、(a+b-c)×d 如(9+5—2)×2=24等;
3.5、a×b+c—d 如11×3+l—10=24等;
3.6、(a-b)×c+d 如(4-l)×6+6=24等。
游戲時,不妨按照上述方法試一試。

『陸』 24點演算法是什麼,用到什麼演算法

24點是把4個整數(一般是正整數)通過加減乘除運算,使最後的計算結果是24的一個數學游戲 可以考驗人的智力和數學敏感性。 通常是使用撲克牌來進行游戲的,一副牌中抽去大小王後還剩下52張(如果初練也可只用1~10這40張牌),任意抽取4張牌(稱為牌組),用加、減、乘、除(可加括弧)把牌面上的數算成24。每張牌必須且只能用一次,如抽出的牌是3、8、8、9,那麼算式為(9—8)×8×3或3×8÷(9—8)或(9—8÷8)×3等。

『柒』 小學生24點演算法技巧是什麼

24點演算法技巧就是要掌握兩個數怎樣加減乘除得24。

加法就是1+23,2+22……

減法就是25-1,28-4……

乘法就是3x8,4x6,12x2,1x24,

除法就是48÷2,72÷3……

快速地將兩個數兩兩結合,得出一個數字,再判定用什麼方法。

(7)24點問題演算法擴展閱讀:

在有解的牌組中,用得最為廣泛的是解法:(我們用a、b、c、d表示牌面上的四個數)

①(a-b)×(c+d) 如(10-4)×(2+2)=24等

②(a+b)÷c×d 如(10+2)÷2×4=24等

③(a-b÷c)×d 如(3-2÷2)×12=24等

④(a+b-c)×d 如(9+5-2)×2=24等

⑤a×b+c-d 如11×3+1-10=24等

『捌』 24點有多少演算法!

24點的巧算方法

「巧算24點」是一種數學游戲,正如象棋、圍棋一樣是一種人們喜聞樂見的娛樂活動。

它始於何年何月已無從考究,但它以自己獨具的數學魅力和豐富的內涵正逐漸被越來越多的人們所接受。這種游戲方式簡單易學,能健腦益智,是一項極為有益的活動。

「巧算24點」的游戲內容如下:一副牌中抽去大小王剩下52張,(如果初練也可只用1~10這40張牌)任意抽取4張牌(稱牌組),用加、減、乘、除(可加括弧)把牌面上的數算成24。每張牌必須用一次且只能用一次,如抽出的牌是3、8、8、9,那麼算式為(9—8)×8×3或3×8+(9—8)或(9—8÷8)×3等。

「算24點」作為一種撲克牌智力游戲,還應注意計算中的技巧問題。計算時,我們不可能把牌面上的4個數的不同組合形式——去試,更不能瞎碰亂湊。這里向大家介紹幾種常用的、便於學習掌握的方法:

1.利用3×8=24、4×6=24求解。

把牌面上的四個數想辦法湊成3和8、4和6,再相乘求解。如3、3、6、10可組成(10—6÷3)×3=24等。又如2、3、3、7可組成(7+3—2)×3=24等。實踐證明,這種方法是利用率最大、命中率最高的一種方法。

2.利用0、11的運算特性求解。

如3、4、4、8可組成3×8+4—4=24等。又如4、5、J、K可組成11×(5—4)+13=24等。

3.在有解的牌組中,用得最為廣泛的是以下六種解法:(我們用a、b、c、d表示牌面上的四個數)

①(a—b)×(c+d)

如(10—4)×(2+2)=24等。

②(a+b)÷c×d

如(10+2)÷2×4=24等。

③(a-b÷c)×d

如(3—2÷2)×12=24等。

④(a+b-c)×d

如(9+5—2)×2=24等。

⑤a×b+c—d

如11×3+l—10=24等。

⑥(a-b)×c+d

如(4—l)×6+6=24等。

游戲時,同學們不妨按照上述方法試一試。

需要說明的是:經計算機准確計算,一副牌(52張)中,任意抽取4張可有1820種不同組合,其中有458個牌組算不出24點,如A、A、A、5。

不難看出,「巧算24點」能極大限度地調動眼、腦、手、口、耳多種感官的協調活動,對於培養我們快捷的心算能力和反應能力很有幫助。

『玖』 24點的演算法

利用計算程序來完成這個計算二十四點的程序
方法如下:
首先窮舉的可行性問題。把表達式如下分成三類——
1、 無括弧的簡單表達式。
2、 有一個括弧的簡單表達式。
3、 有兩個括弧的較復雜表達式。
在棧中,元素的插入稱為壓入(push)或入棧,元素的刪除稱為彈出(pop)或退棧。
棧的基本運算有三種,其中包括入棧運算、退棧運算以及讀棧頂元素,這些請參考相關數據結構資料。根據這些基本運算就可以用數組模擬出棧來。
那麼作為棧的著名應用,表達式的計算可以有兩種方法。
第一種方法:
首先建立兩個棧,操作數棧OVS和運算符棧OPS。其中,操作數棧用來記憶表達式中的操作數,其棧頂指針為topv,初始時為空,即topv=0;運算符棧用來記憶表達式中的運算符,其棧頂指針為topp,初始時,棧中只有一個表達式結束符,即topp=1,且OPS(1)=『;』。此處的『;』即表達式結束符。
然後自左至右的掃描待處理的表達式,並假設當前掃描到的符號為W,根據不同的符號W做如下不同的處理:
1、 若W為操作數
2、 則將W壓入操作數棧OVS
3、 且繼續掃描下一個字元
4、 若W為運算符
5、 則根據運算符的性質做相應的處理:
6、若運算符為左括弧或者運算符的優先順序大於運算符棧棧頂的運算符(即OPS(top)),則將運算符W壓入運算符棧OPS,並繼續掃描下一個字元。
7、若運算符W為表達式結束符『;』且運算符棧棧頂的運算符也為表達式結束符(即OPS(topp)=』;』),則處理過程結束,此時,操作數棧棧頂元素(即OVS(topv))即為表達式的值。
8、若運算符W為右括弧且運算符棧棧頂的運算符為左括弧(即OPS(topp)=』(『),則將左括弧從運算符棧談出,且繼續掃描下一個符號。
9、若運算符的右不大於運算符棧棧頂的運算符(即OPS(topp)),則從操作數棧OVS中彈出兩個操作數,設先後彈出的操作數為a、b,再從運算符棧OPS中彈出一個運算符,設為+,然後作運算a+b,並將運算結果壓入操作數棧OVS。本次的運算符下次將重新考慮。
第二種方法:
首先對表達式進行線性化,然後將線性表達式轉換成機器指令序列以便進行求值。
那麼什麼是表達式的線性化呢?人們所習慣的表達式的表達方法稱為中綴表示。中綴表示的特點是運算符位於運算對象的中間。但這種表示方式,有時必須藉助括弧才能將運算順序表達清楚,而且處理也比較復雜。
1929年,波蘭邏輯學家Lukasiewicz提出一種不用括弧的邏輯符號體系,後來人們稱之為波蘭表示法(Polish notation)。波蘭表達式的特點是運算符位於運算對象的後面,因此稱為後綴表示。在對波蘭表達式進行運算,嚴格按照自左至右的順序進行。下面給出一些表達式及其相應的波蘭表達式。
表達式波蘭表達式
A-B AB-
OK,所謂表達式的線性化是指將中綴表達的表達式轉化為波蘭表達式。對於每一個表達式,利用棧可以把表達式變換成波蘭表達式,也可以利用棧來計算波蘭表達式的值。
至於轉換和計算的過程和第一種方法大同小異,這里就不再贅述了。
下面給出轉換和計算的具體實現程序——
這樣這個程序基本上就算解決了,回過頭來拿這個程序來算一算文章開始的那個問題。很快就算出來了,原來如此簡單——(6-3)*10-6=24。

『拾』 算24點的數字游戲規則

拿一副牌,抽去大小王後(也可以把J/Q/K/大小王也拿去),剩下1~10這40張牌(以下用1代替A)。任意抽取4張牌(稱為牌組),用加、減、乘、除把牌面上的數算成24。每張牌必須用且只能用一次。

24點要求四個數字運算結果等於二十四,每張牌必須用且只能用一次。如抽出的牌是3、8、8、9,那麼算式為(9-8)×8×3=24。

24點以獨具的數學魅力和豐富的內涵正逐漸被越來越多的人們所接受。這種游戲方式簡單易學,能健腦益智,是一項有益的活動。

(10)24點問題演算法擴展閱讀:

24點游戲解鎖技巧

24點有一定的解題技巧 ,由於計算最終結果是24,初始數字都是整數,有一些固定的思路。

常規的比如:

3*8=24,4*6=24,2*12=24,24*1=24。

頻率略低一些的:

25-1=24,23+1=24,22+2=24,15+9=24,28-4=24,36-12=24。

閱讀全文

與24點問題演算法相關的資料

熱點內容
如何理解php面向對象 瀏覽:96
macword轉pdf 瀏覽:848
python列表求交集 瀏覽:872
解壓包如何轉音頻 瀏覽:447
機明自動編程軟體源碼 瀏覽:325
php埠號設置 瀏覽:541
phperegreplace 瀏覽:320
androidgridview翻頁 瀏覽:537
ssh協議編程 瀏覽:634
如何開我的世界電腦伺服器地址 瀏覽:861
玄關pdf 瀏覽:609
程序員學習論壇 瀏覽:940
程序員的毒雞湯怎麼做 瀏覽:548
安卓怎麼降級軟體到手機 瀏覽:281
雲與伺服器入門書籍推薦產品 瀏覽:636
delphi編程助手 瀏覽:762
電腦遇到伺服器問題怎麼辦 瀏覽:515
加工中心編程結束方法 瀏覽:296
了解什麼是web伺服器 瀏覽:140
面向對象的編程的基本特徵 瀏覽:718