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 AJAX实例根据邮编自动完成地址信息
Nov 23 PHP
PHP strtotime函数详解
Dec 18 PHP
批量修改RAR文件注释的php代码
Nov 20 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
Aug 07 PHP
php函数间的参数传递(值传递/引用传递)
Sep 23 PHP
php输出1000以内质数(素数)示例
Feb 16 PHP
php 判断服务器操作系统的类型
Feb 17 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
Apr 08 PHP
PHP单例模式定义与使用实例详解
Feb 06 PHP
PHP 无限级分类
May 04 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
Jan 20 PHP
实例讲解php将字符串输出到HTML
Jan 27 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
《APMServ 5.1.2》使用图解
2006/10/23 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
初学Javascript的一些总结
2008/11/03 Javascript
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
javascript学习之闭包分析
2010/12/02 Javascript
当jquery ajax遇上401请求的解决方法
2016/05/19 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
javaScript基础详解
2017/01/19 Javascript
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
Vue2.x中的父组件传递数据至子组件的方法
2017/05/01 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
用Python实现协同过滤的教程
2015/04/08 Python
一行Python代码过滤标点符号等特殊字符
2019/08/12 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
flask框架自定义url转换器操作详解
2020/01/25 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
PyTorch安装与基本使用详解
2020/08/31 Python
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
C#如何允许一个类被继承但是避免这个类的方法被重载?
2015/02/24 面试题
入党申请人的自我鉴定
2013/12/01 职场文书
酒店中秋节活动方案
2014/01/31 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python
使用goaccess分析nginx日志的详细方法
2021/07/09 Servers
一些让Python代码简洁的实用技巧总结
2021/08/23 Python