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容易忘记的知识点分享
Apr 30 PHP
遭遇php的in_array低性能问题
Sep 17 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
Feb 18 PHP
php设置session值和cookies的学习示例
Mar 21 PHP
php实例分享之html转为rtf格式
Jun 02 PHP
PHP向浏览器输出内容的4个函数总结
Nov 17 PHP
Zend Framework教程之模型Model用法简单实例
Mar 04 PHP
PHP实现带重试功能的curl连接示例
Jul 28 PHP
php基于curl实现随机ip地址抓取内容的方法
Oct 11 PHP
php-msf源码详解
Dec 25 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
Laravel多用户认证系统示例详解
Mar 13 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/03/28 PHP
用php过滤危险html代码的函数
2008/07/22 PHP
PHP一些常用的正则表达式字符的一些转换
2008/07/29 PHP
C# Assembly类访问程序集信息
2009/06/13 PHP
php SQL Injection with MySQL
2011/02/27 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
些很实用且必用的小脚本代码
2006/06/26 Javascript
js活用事件触发对象动作
2008/08/10 Javascript
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
2015/02/20 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
JS实现获取剪贴板内容的方法
2016/06/21 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
python比较两个列表大小的方法
2015/07/11 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
2018/06/13 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
党员个人思想汇报
2013/12/28 职场文书
书法培训心得体会
2014/01/05 职场文书
应届生求职信范文
2014/05/26 职场文书
农村文化建设标语
2014/10/07 职场文书
单位工作证明范本
2015/06/15 职场文书
如何做好员工培训计划?
2019/07/09 职场文书
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL