求24点表达式的php实现

来源:互联网 发布:淘宝软文怎么写 编辑:程序博客网 时间:2024/06/06 16:26

将给定的四个数做四则运算,每个数只能用一次,结果得到给定的值,求该运算表达式

鸟哥的微博上看来的,代码如下:

<?php/** * 将给定的四个数做四则运算,每个数只能用一次,结果得到给定的值,求该运算表达式 * by wbq 2012-2-14 * $n:数组四个数可以是任意0-99 * $r:要运算的结果值 */$n = array(1,2,3,4);$r = 30;$m = 0;$l = count($n);get41($n,$l);if (!$m) echo "无法计算!";/** * 执行四则运算的主方法-递归方法 * @param $n 要操作的数的数组,数可以为表达式 * @param $l 该数组的有意义的元素的个数 */function get41($n,$l){global $r;if ($l == 1) {/** * 构造php语句,并eval执行表达式,如果返回给定值,则打印表达式并退出 */$result = 'return ' . $n[0] . ';';if (abs(eval($result)) == $r) {            $m = 1;echo $n[0]."=".$r; exit;}}for ($i= 0; $i< $l; $i++) {for ($j= $i+1; $j< $l; $j++) {/** * 获取当前要进行四则运算的两个数 * $n[$i]和它的下一个数$n[$j] */$nl = $n[$i];$nr = $n[$j];/** * 将当前数与其下一个数的四则运算表达式push入$n数组的第$i个元素内 * 将$n数组的最后一个元素push入$n数组的第$i+1($j)个元素内 * 并将$l的值-1(由于最后一个元素已经push入前面的元素中,所以有意义的元素个数要-1) * 然后递归调用get41 */$n[$i] = '('.$nl.'+'.$nr.')';$n[$j] = $n[$l-1];get41($n,$l-1);$n[$i] = '('.$nl.'-'.$nr.')';$n[$j] = $n[$l-1];get41($n,$l-1);$n[$i] = '('.$nr.'-'.$nl.')';$n[$j] = $n[$l-1];get41($n,$l-1);$n[$i] = '('.$nl.'*'.$nr.')';$n[$j] = $n[$l-1];get41($n,$l-1);if ($nr != 0) {$n[$i] = '('.$nl.'/'.$nr.')';$n[$j] = $n[$l-1];get41($n,$l-1);}if ($nl != 0) {$n[$i] = '('.$nr.'/'.$nl.')';$n[$j] = $n[$l-1];get41($n,$l-1);}/** * 如果下一层递归返回false,代表未找到表达式 * 则还原$n数组,$n[$i] = $nl; $n[$j] = $nr;             * 并进入下一次的for+$j循环体 */$n[$i] = $nl;$n[$j] = $nr;}}return false;}


参考链接:

4个数字求值:http://www.laruence.com/stashes/compute.php

代码24.php:https://github.com/laruence/laruence.github.com/tree/master/php-gtk-example

原创粉丝点击