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版
Oct 09 PHP
PHP学习资料汇总与网址
Mar 16 PHP
PHP模块 Memcached功能多于Memcache
Jun 14 PHP
PHP5 的对象赋值机制介绍
Aug 02 PHP
php笔记之:php数组相关函数的使用
Apr 26 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
Aug 21 PHP
Windows7下的php环境配置教程
Feb 28 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
Mar 03 PHP
Codeigniter检测表单post数据的方法
Mar 21 PHP
PHP命名空间namespace用法实例分析
Sep 27 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
PHP实现的多维数组去重操作示例
Jul 21 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
投票管理程序
2006/10/09 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
php实现比较两个文件夹异同的方法
2015/06/18 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
laravel 数据验证规则详解
2019/10/23 PHP
js 实现无干扰阴影效果 简单好用(附文件下载)
2009/12/27 Javascript
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
微信小程序非跳转式组件授权登录的方法示例
2019/05/22 Javascript
js实现随机div颜色位置 类似满天星效果
2019/10/24 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
JS实现页面数据懒加载
2020/02/13 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
微信小程序实现聊天室
2020/08/21 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
Python标准异常和异常处理详解
2015/02/02 Python
解读python logging模块的使用方法
2018/04/17 Python
python实现替换word中的关键文字(使用通配符)
2020/02/13 Python
pytorch中的inference使用实例
2020/02/20 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
优秀学生干部个人事迹材料
2014/06/02 职场文书
机械机修工岗位职责
2014/08/03 职场文书
大学生自荐材料范文
2014/12/30 职场文书
晚会开幕词范文
2016/03/04 职场文书
python如何做代码性能分析
2021/04/26 Python
Tomcat用户管理的优化配置详解
2022/03/31 Servers
python playwrigh框架入门安装使用
2022/07/23 Python