ignore_user_abort(true);
set_time_limit(0);
$tmp = array();
function getArr($arr='')
{
for ($i = 1; $i <= 9; $i++) {
if ( empty($arr) ) {
$arr[] = $i;
} elseif ( in_array($i, $arr) ) {
continue;
} else {
$arr[] = $i;
}
if ( count($arr) < 9 ) {
getArr($arr);
}
if ( count($arr) < 9 && count($arr) > 1 ) {
array_pop($arr);
continue;
} elseif ( count($arr) == 1 ) {
unset($arr);
continue;
} elseif ( checkArr($arr) ) {
$GLOBALS['tmp'][] = $arr;
}
}
}
function checkArr($arr)
{
$m = array();
$m[] = $arr[0] + $arr[1] + $arr[2];
$m[] = $arr[3] + $arr[4] + $arr[5];
$m[] = $arr[6] + $arr[7] + $arr[8];
$m[] = $arr[0] + $arr[3] + $arr[6];
$m[] = $arr[1] + $arr[4] + $arr[7];
$m[] = $arr[2] + $arr[5] + $arr[8];
$m[] = $arr[0] + $arr[4] + $arr[8];
$m[] = $arr[2] + $arr[4] + $arr[6];
$tmp = array_count_values($m);
foreach ($tmp as $v) {
if ( $v == 8 ) {
return true;
} else {
return false;
}
}
}
$startTime = microtime(true);
getArr();
$endTime = microtime(true);
for( $i=0; $i$arr = $tmp[$i];
echo $str=<<
| {$arr[0]} |
{$arr[1]} |
{$arr[2]} |
| {$arr[3]} |
{$arr[4]} |
{$arr[5]} |
| {$arr[6]} |
{$arr[7]} |
{$arr[8]} |
fs;
}
echo '
共花費時間:';
echo round($endTime - $startTime, 3);
echo '秒
';www.2cto.com
die;
用窮舉的方式完成的,8個結果
我的電腦大約要花10.5秒種時間
用遞迴的方式完成,可以很方便的增加到4階、5階……
花了20分種寫出來的,如果把不可能條件排除的話應該不用一秒鐘就可以完成的
你們最喜歡的智力題
作者:zdrjlamp
http://www.bkjia.com/PHPjc/478057.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/478057.htmlTechArticleignore_user_abort(true); set_time_limit(0); $tmp = array(); function getArr($arr=) { for ($i = 1; $i = 9; $i++) { if ( empty($arr) ) { $arr[] = $i; } elseif ( in_array($i, $arr) ) {...