You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP处理含C/D/+操作符的多类型数组得分计算问题求解

原有代码问题排查
  • 逻辑设计错误:同时修改输入数组$nwe和临时存储数组$last,循环条件sizeof($nwe)会随数组元素删除动态变小,导致遍历不全、索引混乱。
  • 操作符处理逻辑错误:C操作的需求是删除上一条有效得分,原有代码错误检索原输入数组的键做删除,反而引入无效值;+操作使用的$test变量没有每次计算前重置,累加了历史错误数据。
  • 缺少类型转换:输入的数字是字符串类型,未做数值转换直接参与计算,会出现隐式类型转换错误。
正确实现方案

该问题适合用栈(数组模拟)存储所有有效得分,全程不需要修改原输入数组,处理逻辑如下:

  • 遇到数字字符串,转成整数压入栈
  • 遇到C,弹出栈顶元素(即移除上一条有效得分)
  • 遇到D,取栈顶元素乘以2,计算结果压入栈
  • 遇到+,取栈顶两个元素求和,计算结果压入栈
    最终对栈内所有元素求和即可得到结果。

可运行代码

// 测试输入
$ops = ["5","2","C","D","+"];
$scoreStack = [];

foreach ($ops as $item) {
    switch ($item) {
        case 'C':
            array_pop($scoreStack);
            break;
        case 'D':
            $scoreStack[] = 2 * end($scoreStack);
            break;
        case '+':
            $scoreStack[] = $scoreStack[count($scoreStack)-1] + $scoreStack[count($scoreStack)-2];
            break;
        default:
            $scoreStack[] = intval($item);
    }
}

// 输出最终得分总和
echo array_sum($scoreStack);
// 上述测试用例输出结果为30,符合预期

内容的提问来源于stack exchange,提问作者Atif Raja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:06:01