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

PHP历理 做一个计算24点的功能重构版

时间:2024-06-01 09:03:58浏览次数:33  
标签:24 10 set tmpValues values 历理 array PHP

注意:同样存在少数计算不出24的现象,不过已经接近完善了

<?php

set_time_limit(0);
$values = array(2, 4, 10, 10);
$result = 24;

$list = array();

echo "<pre>";
@makeValue($values);
print_r($list);

function makeValue($values, $set=array())
{
    $words = array("+", "-", "*", "/");
    if(sizeof($values)==1)
    {
        $set[] = array_shift($values);
        return makeSpecial($set);
    }

    foreach($values as $key=>$value)
    {
        $tmpValues = $values;
        unset($tmpValues[$key]);
        foreach($words as $word)
        {
            makeValue($tmpValues, array_merge($set, array($value, $word)));
        }
    }
}

function makeSpecial($set)
{
    $size = sizeof($set);

    if($size<=3 || !in_array("/", $set) && !in_array("*", $set))
    {
        return makeResult($set);
    }

    for($len=3; $len<$size-1; $len+=2)
    {
        for($start=0; $start<$size-1; $start+=2)
        {
            if(!($set[$start-1]=="*" || $set[$start-1]=="/" || $set[$start+$len]=="*" || $set[$start+$len]=="/"))
                continue;
            $subSet = array_slice($set, $start, $len);
            if(!in_array("+", $subSet) && !in_array("-", $subSet))
                continue;
            $tmpSet = $set;
            array_splice($tmpSet, $start, $len-1);
            $tmpSet[$start] = "(".implode("", $subSet).")";
            makeSpecial($tmpSet);
        }
    }
}

function makeResult($set)
{
    global $result, $list;
    $str = implode("", $set);
    @eval("\$num=$str;");
    if($num==$result && !in_array($str, $list))
        $list[] = $str;
}

?>

效果图:

Array
(
    [0] => (2+4/10)*10
    [1] => (4/10+2)*10
    [2] => 10*(2+4/10)
    [3] => 10*(4/10+2)
)

标签:24,10,set,tmpValues,values,历理,array,PHP
From: https://www.cnblogs.com/onestopweb/p/18225499

相关文章

  • PHP历理 做一个计算24点的功能完善版
    <?php/*demo*/$tf=newTwentyFourCal();$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(......
  • 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.组合问题
    一、回溯法回溯法是一种搜索方式,也是递归的副产品。只要有递归就会有回溯回溯法并不是什么高效的算法。因为回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。回溯法,一般可以解决如下几种问题......