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里的JS打印函数
Oct 09 PHP
php中存储用户ID和密码到mysql数据库的方法
Feb 06 PHP
一个简单且很好用的php分页类
Oct 26 PHP
php版小黄鸡simsimi聊天机器人接口分享
Jan 26 PHP
PHP过滤★等特殊符号的正则
Jan 27 PHP
php显示指定目录下子目录的方法
Mar 20 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
Jun 21 PHP
php实现跨域提交form表单的方法【2种方法】
Oct 17 PHP
php 实现一个字符串加密解密的函数实例代码
Nov 01 PHP
利用php-cli和任务计划实现订单同步功能的方法
May 03 PHP
PHP实现随机数字、字母的验证码功能
Aug 01 PHP
YII框架实现自定义第三方扩展操作示例
Apr 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
php面向对象的方法重载两种版本比较
2008/09/08 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
jQuery的deferred对象使用详解
2011/08/20 Javascript
JavaScript入门之对象与JSON详解
2011/10/21 Javascript
jQuery异步验证用户名是否存在示例代码
2014/05/21 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
JQuery中Bind()事件用法分析
2015/05/05 Javascript
AngularJS  $on、$emit和$broadcast的使用
2016/09/05 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
vue select选择框数据变化监听方法
2018/08/24 Javascript
Angular6新特性之Angular Material
2018/12/28 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
Python help()函数用法详解
2014/03/11 Python
python在控制台输出进度条的方法
2015/06/20 Python
Python对象转JSON字符串的方法
2016/04/27 Python
python getopt详解及简单实例
2016/12/30 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
索桥的故事教学反思
2014/02/06 职场文书
《故乡》教学反思
2014/04/10 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书
解除租赁合同协议书
2016/03/21 职场文书
Vue实现动态查询规则生成组件
2021/05/27 Vue.js
服务器SVN搭建图文安装过程
2022/06/21 Servers