php数字游戏 计算24算法


Posted in PHP onJune 10, 2012

算法思路:把每一个数字看做一个独立的数学表达式,表达式之间加上标点符号组合成新表达式,一共组合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) ); 
?>
PHP 相关文章推荐
Zend公司全球首推PHP认证
Oct 09 PHP
Zend 输出产生XML解析错误
Mar 03 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
Apr 09 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
关于PHP session 存储方式的详细介绍
Jun 25 PHP
php合并js请求的例子
Nov 01 PHP
基于CakePHP实现的简单博客系统实例
Jun 28 PHP
PHPCMS2008广告模板SQL注入漏洞修复
Oct 11 PHP
PHP 7.1新特性的汇总介绍
Dec 16 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
Oct 12 PHP
解决laravel5.4下的group by报错的问题
Oct 16 PHP
如何在PHP环境中使用ProtoBuf数据格式
Jun 19 PHP
细谈php中SQL注入攻击与XSS攻击
Jun 10 #PHP
逆序二维数组插入一元素的php代码
Jun 08 #PHP
PHP 年龄计算函数(精确到天)
Jun 07 #PHP
PHP序列号生成函数和字符串替换函数代码
Jun 07 #PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
Jun 07 #PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
Jun 07 #PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
Jun 07 #PHP
You might like
php 面试碰到过的问题 在此做下记录
2011/06/09 PHP
PHP源码之explode使用说明
2011/08/05 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
用JAVASCRIPT如何给&amp;lt;textarea&amp;gt;&amp;lt;/textarea&amp;gt;赋值
2007/04/20 Javascript
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
通用JS事件写法实现代码
2009/01/07 Javascript
javascript 数组学习资料收集
2010/04/11 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
JSON遍历方式实例总结
2015/12/07 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
Vue自定义事件(详解)
2017/08/19 Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
ES6 Proxy实现Vue的变化检测问题
2019/06/11 Javascript
python2.7实现FTP文件下载功能
2018/04/15 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
python机器学习实现决策树
2019/11/11 Python
Python 静态方法和类方法实例分析
2019/11/21 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
一个入门级python爬虫教程详解
2021/01/27 Python
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
2013年高中生自我评价
2013/10/23 职场文书
初中音乐教学反思
2014/01/12 职场文书
辞旧迎新演讲稿
2014/09/15 职场文书
成都人事代理协议书
2014/10/25 职场文书
大学生助学金感谢信
2015/01/21 职场文书
家长会感言
2015/08/01 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
k-means & DBSCAN 总结
2021/04/27 Python
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL
详解在OpenCV中如何使用图像像素
2022/03/03 Python
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python