ホームページ > バックエンド開発 > PHPチュートリアル > 九公格アルゴリズムのコードソリューションについて

九公格アルゴリズムのコードソリューションについて

WBOY
リリース: 2016-06-13 12:24:34
オリジナル
1046 人が閲覧しました

九公格アルゴリズム

<br /><?php<br /><br />ignore_user_abort(true);<br />set_time_limit(0);<br />$tmp = array();<br /><br />function getArr($arr='') {<br />    for ($i = 0; $i <= 11; $i++) {<br />        $arr[] = $i;  <br />        if (count($arr) < 8) {<br />            getArr($arr);<br />        }<br />        <br />        if ( count($arr) < 8 && count($arr) > 1 ) {<br />                array_pop($arr);<br />                continue;<br />            } elseif ( count($arr) == 1 ) {<br />                unset($arr);<br />                continue;<br />            } elseif ( checkArr($arr) ) {<br />                $GLOBALS['tmp'][] = $arr;<br />            }<br />    }<br />}<br /><br />function checkArr($arr)<br />{<br />    $m = array();<br />    $val = 4;<br />    if ($val == $arr[0] + $arr[1] - 9){<br />        $m[] = $arr[0] + $arr[1] - 9;<br />    }    <br />    if ($val == $arr[2] - $arr[3] * $arr[4]) {<br />        $m[] = $arr[2] - $arr[3] * $arr[4];<br />    }    <br />    if ($val == $arr[5] + $arr[6] - $arr[7]) {<br />        $m[] = $arr[5] + $arr[6] - $arr[7];<br />    }<br />    if ($arr[5] != 0) {<br />        if ($val == $arr[0] + $arr[2] / $arr[5]) {<br />            $m[] = $arr[0] + $arr[2] / $arr[5];<br />        }<br />    }<br />    if ($val == $arr[1] - $arr[3] * $arr[6]) {<br />        $m[] = $arr[1] - $arr[3] * $arr[6];<br />    }<br />    if ($val == 9 - $arr[4] - $arr[7]) {<br />        $m[] = 9 - $arr[4] - $arr[7];<br />    }<br />    $tmp = array_count_values($m);<br />    foreach ($tmp as $v) {<br />        if ( $v == 6 ) {<br />            return true;<br />        } else {<br />            return false;<br />        }<br />    }<br />}<br />$startTime = microtime(true);<br />getArr();<br />$endTime = microtime(true);<br />for( $i=0; $i<count($tmp); $i++ ) {<br />$arr = $tmp[$i];<br />echo $str=<<<fs<br />    <table border="1"   style="max-width:90%"><br />        <tr><br />            <td>{$arr[0]}</td><br />            <td>{$arr[1]}</td><br />            <td>9</td><br />        </tr><br />        <tr><br />            <td>{$arr[2]}</td><br />            <td>{$arr[3]}</td><br />            <td>{$arr[4]}</td><br />        </tr><br />        <tr><br />            <td>{$arr[5]}</td><br />            <td>{$arr[6]}</td><br />            <td>{$arr[7]}</td><br />        </tr><br />    </table><br />fs;<br />}<br />echo '<div style="float:left;width:100%;height:5px;clear:both"></div><h1 style="float:left">共花费时间:';<br />echo round($endTime - $startTime, 3);<br />echo '秒</h1>';<br />die;<br />
ログイン後にコピー

のコードについては、オンライン九公格網​​羅コードをモデルにしており、結果は無限ループになります。ぜひご覧ください。
------ソリューションのアイデア----------------------
<br /><?php<br />set_time_limit(300);<br />print_r(test());<br />function test(){<br />    $ret = array();<br />    for($a=0; $a<12; $a++){<br />        for($b=0; $b<12; $b++){<br />            for($c=0; $c<12; $c++){<br />                for($d=0; $d<12; $d++){<br />                    for($e=0; $e<12; $e++){<br />                        for($f=1; $f<12; $f++){<br />                            for($g=0; $g<12; $g++){<br />                                for($h=0; $h<12; $h++){<br />                                    if($a+$b-9==4 && $c-$d*$e==4 && $f+$g-$h==4 && $a+$c/$f==4 && $b-$d*$g==4 && 9-$e-$h==4){<br />                                        return array(<br />                                                'a' => $a,<br />                                                'b' => $b,<br />                                                'c' => $c,<br />                                                'd' => $d,<br />                                                'e' => $e,<br />                                                'f' => $f,<br />                                                'g' => $g,<br />                                                'h' => $h<br />                                            );<br />                                    }<br />                                }<br />                            }<br />                        }<br />                    }<br />                }<br />            }<br />        }<br />    }<br />    return $ret;<br />}<br />?><br />
ログイン後にコピー

配列 ( [a] => 2 [b] => 4 [d] => 2 [g] => h] => 5 )

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート