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 相关文章推荐
Windows下的PHP5.0安装配制详解
Sep 05 PHP
PHP 字符串操作入门教程
Dec 06 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
Nov 10 PHP
PHP取二进制文件头快速判断文件类型的实现代码
Aug 05 PHP
php中explode函数用法分析
Nov 15 PHP
基于PHP实现假装商品限时抢购繁忙的效果
Oct 16 PHP
php 的反射详解及示例代码
Aug 25 PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 PHP
Yii框架弹出框功能示例
Jan 07 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
laravel 修改记住我功能的cookie保存时间的方法
Oct 14 PHP
Yii框架自定义数据库操作组件示例
Nov 11 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 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
php session和cookie使用说明
2010/04/07 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
Laravel 5.0 发布 新版本特性详解
2015/02/10 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
dojo随手记 gird组件引用
2011/02/24 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
2015/02/20 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
微信小程序实现图片滚动效果示例
2018/12/05 Javascript
基于vue、react实现倒计时效果
2019/08/26 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
JS实现页面鼠标点击出现图片特效
2020/08/19 Javascript
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
python使用marshal模块序列化实例
2014/09/25 Python
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
Django如何防止定时任务并发浅析
2019/05/14 Python
python中class的定义及使用教程
2019/09/18 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
python操作yaml说明
2020/04/08 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
市场部专员岗位职责
2013/11/30 职场文书
给民警的表扬信
2014/01/08 职场文书
秋游活动策划方案
2014/02/16 职场文书
奥巴马连任演讲稿
2014/05/15 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
Nginx图片服务器配置之后图片访问404的问题解决
2022/03/21 Servers