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下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
php的$_FILES的临时储存文件与回收机制实测过程
Jul 12 PHP
常用PHP框架功能对照表
Oct 23 PHP
PHP中require和include路径问题详解
Dec 25 PHP
Codeigniter校验ip地址的方法
Mar 21 PHP
PHP时间和日期函数详解
May 08 PHP
php 输入输出流详解及示例代码
Aug 25 PHP
Zend Framework实现自定义过滤器的方法
Dec 09 PHP
PHP+原生态ajax实现的省市联动功能详解
Aug 15 PHP
Laravel框架集合用法实例浅析
May 14 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 PHP
php框架知识点的整理和补充
Mar 01 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 OPCode缓存 APC详细介绍
2010/10/12 PHP
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
PHP处理excel cvs表格的方法实例介绍
2013/05/13 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
2013/06/21 PHP
php json与xml序列化/反序列化
2013/10/28 PHP
浅谈discuz密码加密的方式
2014/05/22 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
php通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
php实现短信发送代码
2015/07/05 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
js select常用操作控制代码
2010/03/16 Javascript
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
css结合js制作下拉菜单示例代码
2014/02/27 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
JS面向对象编程详解
2016/03/06 Javascript
AngularJS 模块化详解及实例代码
2016/09/14 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
python处理csv数据的方法
2015/03/11 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
大学生军训自我鉴定
2014/02/12 职场文书
2014机关干部学习“焦裕禄精神”思想汇报
2014/09/19 职场文书
2014年群众路线党员自我评议
2014/09/24 职场文书
运动会宣传稿50字
2015/07/23 职场文书
教师旷工检讨书
2015/08/15 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang