當前位置:編程學習大全網 - 編程語言 - 12 13 4 9 算24點

12 13 4 9 算24點

它沒有答案

因為壹副牌(52張)中,任意抽取4張可有1820種不同組合,其中有458個牌組算不出24點。

1、概述

給定4個整數,其中每個數字只能使用壹次;任意使用 + - * / ( ) ,構造出壹個表達式,使得最終結果為24,這就是常見的算24點的遊戲。這方面的程序很多,壹般都是窮舉求解。本文介紹壹種典型的算24點的程序算法,並給出兩個具體的算24點的程序:壹個是面向過程的C實現,壹個是面向對象的java實現。

2、基本原理

基本原理是窮舉4個整數所有可能的表達式,然後對表達式求值。

表達式的定義: expression = (expression|number) operator (expression|number)

因為能使用的4種運算符 + - * / 都是2元運算符,所以本文中只考慮2元運算符。2元運算符接收兩個參數,輸出計算結果,輸出的結果參與後續的計算。

由上所述,構造所有可能的表達式的算法如下:

(1) 將4個整數放入數組中

(2) 在數組中取兩個數字的排列,***有 P(4,2) 種排列。對每壹個排列,

(2.1) 對 + - * / 每壹個運算符,

(2.1.1) 根據此排列的兩個數字和運算符,計算結果

(2.1.2) 改表數組:將此排列的兩個數字從數組中去除掉,將 2.1.1 計算的結果放入數組中

(2.1.3) 對新的數組,重復步驟 2

(2.1.4) 恢復數組:將此排列的兩個數字加入數組中,將 2.1.1 計算的結果從數組中去除掉

可見這是壹個遞歸過程。步驟 2 就是遞歸函數。當數組中只剩下壹個數字的時候,這就是表達式的最終結果,此時遞歸結束。

在程序中,壹定要註意遞歸的現場保護和恢復,也就是遞歸調用之前與之後,現場狀態應該保持壹致。在上述算法中,遞歸現場就是指數組,2.1.2 改變數組以進行下壹層遞歸調用,2.1.3 則恢復數組,以確保當前遞歸調用獲得下壹個正確的排列。

括號 () 的作用只是改變運算符的優先級,也就是運算符的計算順序。所以在以上算法中,無需考慮括號。括號只是在輸出時需加以考慮。

  • 上一篇:中聯AK8120分機號碼怎麽修改?
  • 下一篇:阿裏媽媽AB-test實驗平臺Tesla
  • copyright 2024編程學習大全網