php数字游戏 计算24算法

 更新时间:2012年06月10日 18:39:46   作者:   我要评论

输入任意4个数字,然后对其进行+-*/组合,所得数学表达式值等于24
算法思路:把每一个数字看做一个独立的数学表达式,表达式之间加上标点符号组合成新表达式,一共组合4次,表达式之间的所有组合可以通过递归来实现.
代码如下:
复制代码 代码如下:

<?php
/**
* A 24 maker
* @version 1.0.0
* @author laruence<laruence at yahoo.com.cn>
* @copyright (c) 2009 http://www.laruence.com
*/
class TwentyFourCal {
public $needle = 24;
public $precision = '1e-6';
function TwentyFourCal() {
}
private function notice($mesg) {
var_dump($mesg);
}
/**
* 取得用户输入方法
*/
public function calculate($operants = array()) {
try {
$this->search($operants, 4);
} catch (Exception $e) {
$this->notice($e->getMessage());
return;
}
$this->notice('can\'t compute!');
return;
}
/**
* 求24点算法PHP实现
*/
private function search($expressions, $level) {
if ($level == 1) {
$result = 'return ' . $expressions[0] . ';';
if ( abs(eval($result) - $this->needle) <= $this->precision) {
throw new Exception($expressions[0]);
}
}
for ($i=0;$i<$level;$i++) {
for ($j=$i+1;$j<$level;$j++) {
$expLeft = $expressions[$i];
$expRight = $expressions[$j];
$expressions[$j] = $expressions[$level - 1];
$expressions[$i] = '(' . $expLeft . ' + ' . $expRight . ')';
$this->search($expressions, $level - 1);
$expressions[$i] = '(' . $expLeft . ' * ' . $expRight . ')';
$this->search($expressions, $level - 1);
$expressions[$i] = '(' . $expLeft . ' - ' . $expRight . ')';
$this->search($expressions, $level - 1);
$expressions[$i] = '(' . $expRight . ' - ' . $expLeft . ')';
$this->search($expressions, $level - 1);
if ($expLeft != 0) {
$expressions[$i] = '(' . $expRight . ' / ' . $expLeft . ')';
$this->search($expressions, $level - 1);
}
if ($expRight != 0) {
$expressions[$i] = '(' . $expLeft . ' / ' . $expRight . ')';
$this->search($expressions, $level - 1);
}
$expressions[$i] = $expLeft;
$expressions[$j] = $expRight;
}
}
return false;
}
function __destruct() {
}
}
/* demo */
$tf = new TwentyFourCal();
$tf->calculate( array(4,8,8,8) );
?>

相关文章

  • stripos函数知识点实例分享

    stripos函数知识点实例分享

    在本篇内容中我们给大家分享了关于stripos函数知识点实例内容,有需要的朋友们跟着学习下。
    2019-02-02
  • Joomla使用Apache重写模式的方法

    Joomla使用Apache重写模式的方法

    这篇文章主要介绍了Joomla使用Apache重写模式的方法,简单讲述了Joomla开启Apache重写模式的步骤与相关技巧,需要的朋友可以参考下
    2016-05-05
  • PHP示例演示发送邮件给某个邮箱

    PHP示例演示发送邮件给某个邮箱

    文中通过示例代码介绍了php表单提交并发送邮件给某个邮箱,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 浅析PHP微信支付通知的处理方式

    浅析PHP微信支付通知的处理方式

    本文是对上篇文章的一个补充,主要是官方没有关于通知的demo,摸石头过河真的很难受,方便大家开发,放出来给大家看看
    2014-05-05
  • Linux操作系统安装LAMP环境

    Linux操作系统安装LAMP环境

    本文给大家介绍的是在Linux操作系统安装LAMP环境的方法和步奏,十分的详细,有需要的小伙伴可以参考下。
    2015-06-06
  • php文件上传的简单实例

    php文件上传的简单实例

    这篇文章介绍了php文件上传的简单实例,有需要的朋友可以参考一下
    2013-10-10
  • yii2局部关闭(开启)csrf的验证的实例代码

    yii2局部关闭(开启)csrf的验证的实例代码

    本篇文章主要介绍了yii2局部关闭(开启)csrf的验证的实例代码。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Laravel学习基础之migrate的使用教程

    Laravel学习基础之migrate的使用教程

    这篇文章主要给大家介绍了关于Laravel学习基础之migrate使用的相关资料,文中通过示例代码介绍非常详细,分别介绍了生成迁移、迁移结构、运行迁移和回滚迁移等实现的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10
  • thinkphp实现多语言功能(语言包)

    thinkphp实现多语言功能(语言包)

    这篇文章主要介绍了thinkphp实现多语言功能(语言包),需要的朋友可以参考下
    2014-03-03
  • PHP微信开发之二维码生成类

    PHP微信开发之二维码生成类

    这篇文章主要介绍了PHP微信开发之二维码生成类,本文使用微信接口实现二维码的生成,并直接给出示例代码,需要的朋友可以参考下
    2015-06-06

最新评论