24点递归算法PHP版本

Meteorlet 2007-12-03 01:32:53

<?php
function Calculate24Point($a, &$r, &$ex, $n)
{
$ex2 = $ex;
if($n == 1)
{
if( abs($a[0] - 24) <= 0.000001 )
{
$r[] = $ex[0];
return true;
} else {
return false;
}
}
for($i = 0; $i < $n; $i ++)
{
for($j = $i + 1; $j < $n; $j ++)
{
$x = $a[$i];
$y = $a[$j];
$a[$j] = $a[$n - 1];

$exa = $ex[$i];
$exb = $ex[$j];
$ex[$j] = $ex[$n - 1];

$a[$i] = $x + $y;
$ex[$i] = "($exa + $exb)";
if(Calculate24Point($a, $r, $ex, $n - 1))
{
return true;
}

$a[$i] = $x - $y;
$ex[$i] = "($exa - $exb)";
if(Calculate24Point($a, $r, $ex, $n - 1))
{
return true;
}

$a[$i] = $y - $x;
$ex[$i] = "($exb - $exa)";
if(Calculate24Point($a, $r, $ex, $n - 1))
{
return true;
}

$a[$i] = $x * $y;
$ex[$i] = "($exa * $exb)";
if(Calculate24Point($a, $r, $ex, $n - 1))
{
return true;
}

if($y != 0)
{
$a[$i] = $x / $y;
$ex[$i] = "($exa / $exb)";
if(Calculate24Point($a, $r, $ex, $n - 1))
{
return true;
}
}

if($x != 0)
{
$a[$i] = $y / $x;
$ex[$i] = "($exb / $exa)";
if(Calculate24Point($a, $r, $ex, $n - 1))
{
return true;
}
}
$a[$i] = $x;
$a[$j] = $y;
$ex = $ex2;
}
}
return false;
}

$a[0] = $ex[0] = $_REQUEST['a1'];
$a[1] = $ex[1] = $_REQUEST['a2'];
$a[2] = $ex[2] = $_REQUEST['a3'];
$a[3] = $ex[3] = $_REQUEST['a4'];

if(Calculate24Point($a, $result, $ex, count($a)))
{
for($i = 0; $i < count($result); $i ++)
{
echo "Answer: " . $result[$i] . "<br>\r\n";
}
} else {
echo "No Answer.";
}
?>


<form action="" method="POST">
<input type="text" size="8" name="a1" value="<?php echo $_REQUEST['a1'];?>"/>
<input type="text" size="8" name="a2" value="<?php echo $_REQUEST['a2'];?>"/>
<input type="text" size="8" name="a3" value="<?php echo $_REQUEST['a3'];?>"/>
<input type="text" size="8" name="a4" value="<?php echo $_REQUEST['a4'];?>"/>
<input type="submit" value="Calculate"/>
</form>

之前有人问起过,递归算法供大家参考。
...全文
252 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
SysTem128 2007-12-03
  • 打赏
  • 举报
回复
看起来是改C的,看过这个.

http://topic.csdn.net/u/20071118/18/0c126923-08b0-44d5-a75c-7f79a6fe8c9b.html

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧