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版(5)
Oct 09 PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 PHP
Zend studio文件注释模板设置方法
Sep 29 PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
Dec 31 PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
Jun 28 PHP
PDO::getAvailableDrivers讲解
Jan 28 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
Sep 03 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
May 12 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
Oct 30 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+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
基于jquery的商品展示放大镜
2010/08/07 Javascript
javascript中有趣的反柯里化深入分析
2012/12/05 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
jquery html动态添加的元素绑定事件详解
2016/05/24 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
Vue中避免滥用this去读取data中数据
2021/03/02 Vue.js
[01:15:36]加油刀塔第二期网络版
2014/08/09 DOTA
python控制台显示时钟的示例
2014/02/24 Python
基于python实现名片管理系统
2018/11/30 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
苹果中国官方网站:Apple中国
2016/07/22 全球购物
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
西班牙在线药店:DosFarma
2020/03/28 全球购物
元旦晚会主持词
2014/03/24 职场文书
关于保护环境的标语
2014/06/09 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
作风转变心得体会
2014/09/02 职场文书
会议欢迎词
2015/01/23 职场文书
Python生成九宫格图片的示例代码
2021/04/14 Python
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs
Django分页器的用法你都了解吗
2021/05/26 Python