php版的24點游戲源碼

jspet 9年前發布 | 5K 次閱讀 PHP

<?php

class TwentyFourCal { public $needle = 24; public $precision = '1e-6';

function TwentyFourCal() {
}

private function notice($mesg) {
    var_dump($mesg);
}

/**
 * 取得用戶輸入方法
 */
public function calculate($operants = array()) {
    try {
        $this->search($operants, 4);
    } catch (Exception $e) {
        $this->notice($e->getMessage());
        return;
    }
    $this->notice('can\'t compute!');
    return;
}

/**
 * 求24點算法PHP實現
 */
private function search($expressions, $level) {
    if ($level == 1) {
        $result = 'return ' . $expressions[0] . ';';
        if ( abs(eval($result) - $this->needle) <= $this->precision) {
            throw new Exception($expressions[0]);
        }
    }
    for ($i=0;$i<$level;$i++) {
        for ($j=$i+1;$j<$level;$j++) {
            $expLeft  = $expressions[$i];
            $expRight = $expressions[$j];
            $expressions[$j] = $expressions[$level - 1];

            $expressions[$i] = '(' . $expLeft . ' + ' . $expRight . ')';
            $this->search($expressions, $level - 1);

            $expressions[$i] = '(' . $expLeft . ' * ' . $expRight . ')';
            $this->search($expressions, $level - 1);

            $expressions[$i] = '(' . $expLeft . ' - ' . $expRight . ')';
            $this->search($expressions, $level - 1);

            $expressions[$i] = '(' . $expRight . ' - ' . $expLeft . ')';
            $this->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;
            $expressions[$j] = $expRight;
        }
    }
    return false;
}

function __destruct() {
}

}

/ demo / $tf = new TwentyFourCal(); $tf->calculate( array(4,8,8,8) ); ?></pre>

 本文由用戶 jspet 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!