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 相关文章推荐
提升PHP执行速度全攻略(上)
Oct 09 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 PHP
php去除数组中重复数据
Nov 18 PHP
PHP使用PDO连接ACCESS数据库
Mar 05 PHP
PHP版QQ互联OAuth示例代码分享
Jul 05 PHP
解读PHP中的垃圾回收机制
Aug 10 PHP
PHP 数组遍历foreach语法结构及实例
Jun 13 PHP
Yii2 加载css、js 载静态资源的方法
Mar 10 PHP
PHP简单实现防止SQL注入的方法
Mar 13 PHP
php微信开发之关注事件
Jun 14 PHP
基于PHP的登录和注册的功能的实现
Aug 06 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&amp;mysql(六)
2006/10/09 PHP
?生?D片??C字串
2006/12/06 PHP
PHP-MySQL教程归纳总结
2008/06/07 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
PHP实现多级分类生成树的方法示例
2017/02/07 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
jQuery 判断元素上是否绑定了事件
2009/10/28 Javascript
jqgrid 简单学习笔记
2011/05/03 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
jquery中prop()方法和attr()方法的区别浅析
2013/09/06 Javascript
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
javascript消除window.close()的提示窗口
2015/05/20 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
Vue.js实现移动端短信验证码功能
2017/03/29 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
前端页面文件拖拽上传模块js代码示例
2017/05/19 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
python中实现定制类的特殊方法总结
2014/09/28 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
2019/08/14 Python
在keras 中获取张量 tensor 的维度大小实例
2020/06/10 Python
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
int和Integer有什么区别
2013/05/25 面试题
2014年机关植树节活动方案
2014/02/27 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
关于环保的建议书400字
2014/03/12 职场文书
护士长竞聘书
2014/03/31 职场文书
投资合作协议书
2014/04/17 职场文书
小学老师对学生的评语
2014/12/29 职场文书
Python echarts实现数据可视化实例详解
2022/03/03 Python
Django框架之路由用法
2022/06/10 Python