今天在聊天群里看到这个图,貌似是几个面试题。然后自己动手试了试,结果在第5题卡住了。
想了好久好久,总觉得拿加减号去凑的话情况太多了,数字怎么分割呢?
想到数字的组合超过3个除了123其他都不行的
后来去搜了一下,搜到一个python版本,却怎么看都看不懂
再后来又搜到一个java版本,里面提到说,将空白‘’看成一个运算符
卧槽,瞬间醍醐灌顶。这就变成了将‘+’,‘-’,‘*’,‘/’,‘’ 5个操作符随机插入1-9的8个空位中。
然后遍历一下所有可能,计算出符合结果的表达式。bingo!
于是我开始写代码,for.. ? 卧槽这怎么个遍历法啊?然后又回去看那个python代码
循环每个操作符 -> 接着进入下一层节点 -> 一直到最后一个节点(17) -> 然后返回上一层节点继续循环下一个操作符 -> 完全遍历所有节点
这好像是以前学过的深度优先遍历来着?好吧。。
先写了一个PHP版本:
Hello XiaXue. ';
function echoNoQuestion($idx, $content) {
echo '第'.$idx.'题
';
echo ''.$content.'';
echo '
';
}
function randomArr($length, $min=1, $max=100) {
$ret = [];
for ($i = 0; $i<$length; $i++) {
$ret[] = rand($min, $max);
}
return $ret;
}
// Q1.
$q1_arr = randomArr(10);
function Q1_a($arr) {
$len = count($arr);
$i = 0;
$sum = 0;
while ($i < $len) {
$sum += $arr[$i];
$i++;
}
return $sum;
}
function Q1_b($arr) {
$len = count($arr);
$sum = 0;
for ($i=0; $i<$len; $i++) {
$sum += $arr[$i];
}
return $sum;
}
function Q1_c($arr) {
$len = count($arr);
if ($len > 1) {
$item = array_pop($arr);
return $item + Q1_c($arr);
} else {
return $arr[0];
}
}
echoNoQuestion(1, 'a:'. Q1_a($q1_arr) . '
b:'. Q1_b($q1_arr) .'
c:'. Q1_c($q1_arr) );
// Q2.
$q2_arr1 = randomArr(10, 1, 20);
$q2_arr2 = randomArr(10, 100, 200);
function Q2($arr1, $arr2) {
$ret = [];
foreach ($arr1 as $k=>$v) {
$ret[] = $v;
if (isset($arr2[$k])) {
$ret[] = $arr2[$k];
}
}
return $ret;
}
echoNoQuestion(2, 'arr1:'. join(',', $q2_arr1) . '
arr2:'. join(',', $q2_arr2) .'
c:'. join(',', Q2($q2_arr1, $q2_arr2)) );
// Q3.
function Fibonacci($n=100) {
if ($n == 1) {
return [0];
} elseif ($n == 2) {
return [0, 1];
} else {
$fib = Fibonacci($n-1);
$len = count($fib);
return array_merge($fib, array($fib[$len-1]+$fib[$len-2]));
}
}
echoNoQuestion(3, 'Fibonacci:'. join(', ', Fibonacci(20)) );
// Q4.
$q4_arr = randomArr(5);
function mergeMaxNumber($arr) {
rsort($arr, SORT_STRING );
return join('-', $arr);
}
echoNoQuestion(4, 'Max number:'. mergeMaxNumber($q4_arr) );
// Q5.
$list = range(1, 9);
$idx = 1;
function add100($arr, $next=0) {
global $list, $idx;
$len = count($arr);
if ($len == 17) {
$str = join('', $arr);
if (eval('return '. $str . ';') == 100 ) {
echo $idx.'. '.$str.' = 100
';
$idx++;
}
} else {
$exp = ['+','','-'];//,'*','/'];
foreach ($exp as $c) {
$arr[] = $c;
$next++;
$arr[] = $list[$next];
//$arr[] = $arr[$len-1]+1;
add100($arr, $next);
$next--;
array_pop($arr);
array_pop($arr);
}
}
}
echoNoQuestion(5, 'Resut:');
echo date('H:i:s', time()).'
';
add100([1]);
echo date('H:i:s', time()).'
';
echo '