首页 > 编程语言 >PHP历理 做一个计算24点的功能完善版

PHP历理 做一个计算24点的功能完善版

时间:2024-06-01 09:03:43浏览次数:28  
标签:24 10 功能完善 calculate level expRight 历理 expressions array

<?php
/* demo */
$tf = new TwentyFourCal();
$tf->calculate( array(5,5,5,5) );
$tf->calculate( array(2,4,10,10) );
$tf->calculate( array(4,4,10,10) );
$tf->calculate( array(1,2,7,7) );
$tf->calculate( array(4,4,4,4) );
$tf->calculate( array(1,2,1,2) );

class TwentyFourCal {
    public  $needle = 24;
    public  $precision = '1e-6';
    
    private function notice($mesg) {
        echo $mesg.'<br>';
    }
 
    /**
     * 取得用户输入方法
     */
    public function calculate($operants = array()) {
        try {
            $this->search($operants, 4);
        } catch (Exception $e) {
            $this->notice($e->getMessage());
            return;
        }
        $this->notice('计算不出24!');
        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() {
    }
}
?>

效果图:

((5 * 5) - (5 / 5))
((2 + (4 / 10)) * 10)
(((10 * 10) - 4) / 4)
(((7 * 7) - 1) / 2)
((4 + 4) + (4 * 4))
计算不出24!

标签:24,10,功能完善,calculate,level,expRight,历理,expressions,array
From: https://www.cnblogs.com/onestopweb/p/18225501

相关文章

  • LeetCode 2024/6 每日一题 合集
    2024/6/12928.给小朋友们分糖果I分析枚举所有可能的方案数即可代码实现classSolution{public:intdistributeCandies(intn,intlimit){intans=0;for(inta=0;a<=limit;++a){for(intb=0;b+a<=n&&b<=limi......
  • PHP历理 做一个计算24点的功能
    注意:有些计算24点的数字无法计算出来。不建议使用。<?phpfunctioncalculate24($nums){$operators=['+','-','*','/'];$combinations=[];foreach($numsas$num1){foreach($numsas$num2){if($n......
  • 2024.5.31 做题记录
    1.外星千足虫公元\(2333\)年\(2\)月\(3\)日,在经历了\(17\)年零\(3\)个月的漫长旅行后,“格纳格鲁一号”载人火箭返回舱终于安全着陆。此枚火箭由美国国家航空航天局(NASA)研制发射,行经火星、金星、土卫六、木卫二、谷神星、“张衡星”等\(23\)颗太阳系星球,并最终在小行......
  • 【高质量】2024数学建模国赛B题保奖思路分享(点个关注,后续会更新)
    您的点赞收藏是我继续更新的最大动力!一定要点击如下的卡片链接,那是获取资料的入口!点击链接加入群聊【2024国赛资料合集】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ETW_x4lYO3NoBaDWS48v_PP_8IbE-iaZ&authKey=58GwIb%2BSZ6ZBvEqN3PKw964UkZPTcLP2bCd5qOIgKEQMltIfrA43wjkZU......
  • 解决历理 Win11下载及使用
    Win11下载地址:ed2k://|file|zh-cn_windows_11_consumer_editions_x64_dvd_904f13e4.iso|5517273088|DFD1AE88E36516B87382FC3D3D3F46AD|/普通版家庭版升级专业版密钥:VK7JG-NPHTM-C97JM-9MPGT-3V66T使用步骤:第一步:使用迅雷下载Win11系统第二步:rufus-3.11制作工具,使用其制作系......
  • 《旋转的快速傅里叶变换》——2024.5.31
    $$\aleph$$——发疯记录(无题,不知道起什么好,用前几天看书看到的符号阿列夫表示了)我很久没发过阶段性总结类的博文了,对比去年来是少之又少。一是因为我觉得现在的日子比去年枯燥多了;二是其实我平时会写记录,但没有总的;三是上了高中以后几次语文考试我的作文成绩都很差,老师说我写的......
  • 2024云购源码/运营版/一元购源码/一元夺宝源码/指定中奖/机器人自动购买
     一元云购系统源码,稳定运行已多年无BUG,送真实玩家数据助力快速经营云购演示站:http://zhuye.6323g.com/   ......
  • Apache历理 贝锐花生壳的下载及使用
    下载地址:https://hsk.oray.com/使用方法如下:第一步:进入贝锐花生壳的内网穿透的页面第二步:选择映射协议映射协议https第三步:输入外网域名,默认端口443第四步:输入内网域名:192.168.1.160,默认端口80第五步:提交后诊断映射通过就可正常访问效果图:......
  • 代码随想录算法训练营第第24天 | 回溯法、77.组合问题
    一、回溯法回溯法是一种搜索方式,也是递归的副产品。只要有递归就会有回溯回溯法并不是什么高效的算法。因为回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。回溯法,一般可以解决如下几种问题......
  • Ubuntu server 24 (Linux) Snort3 3.2.1.0 Guardian IPtables 联动实战 主动防御系统(
    一  Snort3安装配置,参考:Ubuntuserver24安装配置snort33.2.1.0网络入侵检测防御系统配置注册规则集-CSDN博客二  安装主动防御程序Guardian1下载,解压tarzxvfguardian-1.7.tar.gzcdguardian-1.7/2 配置#拷贝文件sudocpguardian.pl/usr/local/bin/......