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 02 PHP
PHP 远程关机实现代码
Nov 10 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
Jan 10 PHP
浅析PHP中的i++与++i的区别及效率
Jun 15 PHP
yum命令安装php7和相关扩展
Jul 04 PHP
PHP面向对象程序设计之类与反射API详解
Dec 02 PHP
redirect_uri参数错误的解决方法(必看)
Feb 16 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 PHP
PHP实现 APP端微信支付功能
Jun 22 PHP
PHP让网站移动访问更加友好方法
Feb 14 PHP
laravel框架使用极光推送消息操作示例
Feb 15 PHP
Yii redis集合的基本使用教程
Jun 14 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之第十天
2006/10/09 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
nodejs中的fiber(纤程)库详解
2015/03/24 NodeJs
javascript动态创建链接的方法
2015/05/13 Javascript
javascript 闭包详解
2015/07/02 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
详解Python3中字符串中的数字提取方法
2017/01/14 Python
python列表使用实现名字管理系统
2019/01/30 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
英国二手物品交易网站:Preloved
2017/10/06 全球购物
方正Java笔试题
2014/07/03 面试题
计算机专业大学生的自我评价
2013/11/14 职场文书
考核评语大全
2014/04/29 职场文书
上课随便讲话检讨书
2014/09/12 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
仓管员岗位职责
2015/02/03 职场文书
董事长年会致辞
2015/07/29 职场文书
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python