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 相关文章推荐
关于页面优化和伪静态
Oct 11 PHP
PHP持久连接mysql_pconnect()函数使用介绍
Feb 05 PHP
很让人受教的 提高php代码质量36计
Sep 05 PHP
PHP中source #N问题的解决方法
Jan 27 PHP
php中simplexml_load_string使用实例分享
Feb 13 PHP
PHP实现加密的几种方式介绍
Feb 22 PHP
PHP实现XML与数据格式进行转换类实例
Jul 29 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
Dec 28 PHP
在Laravel中使用DataTables插件的方法
May 29 PHP
PHP使用pdo实现事务处理操作示例
Sep 05 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
Oct 02 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判断终端是手机还是电脑访问网站的思路及代码
2013/04/24 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
js中cookie的使用详细分析
2008/05/28 Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
js实现省级联动(数据结构优化)
2020/07/17 Javascript
python3中str(字符串)的使用教程
2017/03/23 Python
浅析python递归函数和河内塔问题
2017/04/18 Python
python书籍信息爬虫实例
2018/03/19 Python
python批量替换多文件字符串问题详解
2018/04/22 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
用python实现名片管理系统
2020/06/18 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
用css3实现当鼠标移进去时当前亮其他变灰效果
2014/04/08 HTML / CSS
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
体育教育个人自荐信范文
2013/12/01 职场文书
生物科学系大学生的自我评价
2013/12/20 职场文书
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
幼儿园开学通知
2015/04/24 职场文书
交通安全温馨提示语
2015/07/14 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python
Python 可迭代对象 iterable的具体使用
2021/08/07 Python
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers