アルゴリズムのアイデア: 各数値を独立した数式として扱います。式の間に句読点を追加して、合計 4 つの式間の組み合わせを作成できます。コード
コードは次のとおりです:
/*** 24 メーカー
* @バージョン 1.0.0
* @author laruence
* @copyright (c) 2009 http://www.laruence.com
*/
class TwentyFourCal {
public $needle = 24;
function TwentyFourCal ; () {
}
プライベート関数 Notice($mesg) {
var_dump($mesg);
/**
* ユーザー入力メソッドを取得します
*/
パブリック関数 Calculate($operants = array()) {
try {
$ this->search($operants, 4);
} catch (Exception $e) {
$this->notice($e->getMessage());
$ this-> Notice('計算できません!');
return;
/**
* 24 ポイント アルゴリズムの PHP 実装を探しています
*/
プライベート関数 search($expressions, $level) {
if ($level == 1) {
$result = 'return ' . $expressions[0] . ';';
if (abs(eval($result) - $this->needle) <= $this->precision) {
新しい例外($)式[0]);
}
}
for ($i=0;$ifor ($j=$i+1;$j $expLeft = $expressions[$i];
$expRight = $expressions[$j] = $expressions[$level - 1] = '( ' . $expLeft . ' $expRight . ')'
$this->search($level - 1) = '(' . $expLeft . ' * ' . $expRight . ')';
$this->search($expressions, $level - 1);
$expressions[$i] = '(' . $expLeft . ' - ' . $expRight . ') ';
$this->search($expressions, $level - 1);
$expressions[$i] = '(' . $expRight . ' - ' . $expLeft . ')'; ;search($expressions, $level - 1);
if ($expLeft != 0) {
$expressions[$i] = '(' . $expRight . ' / ' . $expLeft . ')'; this->search($expressions, $level - 1);
}
if ($expRight != 0) {
$expressions[$i] = '(' . $expLeft . ' / ' . $expRight . ' )';
$this->search($expressions, $level - 1);
$expressions[$i] = $expLeft;
}
}
return false;
}
function __destruct() {
}
}
/* デモ */
$tf = new TwentyFourCal();
$tf->calculate( array(4,8,8,8) ) ;
?>
http://www.bkjia.com/PHPjc/325586.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/325586.html
技術記事
アルゴリズムのアイデア: 各数値を独立した数式として扱います。式の間に句読点を追加して、式間の合計 4 つの組み合わせを作成できます。