忽然想到做一个小应用,需要使用到24点判断,故而写一个简单版的。
代码粗糙,轻拍。
<?php
/**
* 24点游戏
* @author 长安猎人
*/
$arr = [10, 4, 5, 3];
$opArr = ["+", "-", "*", "/"];
$result = calculate($arr);
if($result == NULL) {
echo "无法找到答案" . PHP_EOL;
}
echo $result;
function calculate($arr) {
global $opArr;
if(count($arr) == 1) {
$str = substr($arr[0], 1, -1);
eval("\$num = " . $str . ";");
if($num == 24) return $str;
return;
}
list($prev, $next) = [$arr[0], $arr[1]];
$combine = [];
for($i = 0; $i < 4; $i++) {
$combine[] = "($prev" . $opArr[$i] . "$next)";
}
$arrFree = array_slice($arr, 2);
$newArr = [];
$combineLen = count($combine);
for($i = 0; $i < $combineLen; $i++) {
$temp = $arrFree;
array_unshift($temp, $combine[$i]); #插入剩余项的头部
$newArr[] = $temp;
}
$newLen = count($newArr);
for ($i=0; $i < $newLen; $i++) {
$res = calculate($newArr[$i]);
if(NULL != $res) return $res;
}
}
网友评论