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 相关文章推荐
PHP4实际应用经验篇(8)
Oct 09 PHP
为IP查询添加GOOGLE地图功能的代码
Aug 08 PHP
PHP在不同页面间传递Json数据示例代码
Jun 08 PHP
php加密解密实用类分享
Jan 07 PHP
php $_SERVER windows系统与linux系统下的区别说明
Feb 14 PHP
PHP使用range协议实现输出文件断点续传代码实例
Jul 04 PHP
PHP超牛逼无限极分类生成树方法
May 11 PHP
PHP类的封装与继承详解
Sep 29 PHP
Codeigniter控制器controller继承问题实例分析
Jan 19 PHP
PHP的邮件群发系统phplist配置方法详细总结
Mar 30 PHP
php数据库操作model类(使用__call方法)
Nov 16 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 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中神奇的fastcgi_finish_request
2011/05/02 PHP
codeigniter中view通过循环显示数组数据的方法
2015/03/20 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
laravel使用数据库测试注意事项
2020/04/10 PHP
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
2016/05/09 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
jQuery实现可兼容IE6的遮罩功能详解
2017/09/19 jQuery
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
python 换位密码算法的实例详解
2017/07/19 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
wxPython绘图模块wxPyPlot实现数据可视化
2019/11/19 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
解决python调用自己文件函数/执行函数找不到包问题
2020/06/01 Python
Python通过字典映射函数实现switch
2020/11/06 Python
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
四群教育工作实施方案
2014/03/26 职场文书
小学毕业演讲稿
2014/04/25 职场文书
小班幼儿评语大全
2014/04/30 职场文书
村委会换届选举方案
2014/05/03 职场文书
个人租房协议书样本
2014/10/01 职场文书
2016感恩父亲节主题广播稿
2015/12/18 职场文书
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记