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 09 PHP
Php部分常见问题总结
Oct 09 PHP
PHP系统流量分析的程序
Oct 09 PHP
也谈截取首页新闻 - 范例
Oct 09 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
Mar 15 PHP
php设计模式 Proxy (代理模式)
Jun 26 PHP
php基于openssl的rsa加密解密示例
Jul 11 PHP
php+resumablejs实现的分块上传 断点续传功能示例
Apr 18 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
thinkPHP3.2.2框架行为扩展及demo示例
Jun 19 PHP
PHP 观察者模式深入理解与应用分析
Sep 25 PHP
Laravel中如何轻松容易的输出完整的SQL语句
Jul 26 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
shopex中集成的站长统计功能的代码简单分析
2011/08/11 PHP
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
[41:17]VG vs Optic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
Python骚操作之动态定义函数
2019/03/26 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
Python调用.NET库的方法步骤
2019/12/27 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
2020/09/21 Python
python 从list中随机取值的方法
2020/11/16 Python
CSS3实现同时执行倾斜和旋转的动画效果
2016/10/27 HTML / CSS
html5新特性与用法大全
2018/09/13 HTML / CSS
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
StubHub澳大利亚:购买或出售您的门票
2019/08/01 全球购物
The North Face意大利官网:服装、背包和鞋子
2020/06/17 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
毕业生的自我评价
2013/12/30 职场文书
2014年社区庆元旦活动方案
2014/03/08 职场文书
毕业晚会主持词
2014/03/24 职场文书
学生请假条格式
2014/04/11 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
React-vscode使用jsx语法的问题及解决方法
2021/06/21 Javascript
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python