1 条题解

  • 0
    @ 2026-2-1 15:11:26
    #include <iostream>
    using namespace std;
    
    // [1] 全局变量定义:基础数组+统计变量,替代局部容器,供全函数调用
    int nums[4];  // 全局基础int数组,存储每组待运算的4个数字(核心修改点)
    int n;        // 测试组数
    int count = 0;// 统计能算出24的组数,初始为0
    
    // 深度优先搜索函数:判断4个数字按顺序运算能否得到24(参数简化,直接用全局nums数组)
    // pos-当前处理的数字索引,current-当前累计运算结果
    bool dfs(int pos, long long current) {
        // [7] 递归终止条件:4个数字全部按顺序运算完毕
        if (pos == 4) {
            // [8] 判断最终运算结果是否为24,是则返回真,否则返回假
            return current == 24;
        }
        // [9] 尝试加法运算:处理下一个数字,累计结果加上当前数字
        if (dfs(pos + 1, current + nums[pos])) {
            return true;
        }
        // [10] 尝试减法运算:处理下一个数字,累计结果减去当前数字
        if (dfs(pos + 1, current - nums[pos])) {
            return true;
        }
        // [11] 尝试乘法运算:处理下一个数字,累计结果乘以当前数字
        if (dfs(pos + 1, current * nums[pos])) {
            return true;
        }
        // [12] 三种运算均尝试,无法得到24,返回假
        return false;
    }
    
    int main() {
        // [2] 输入测试组数
        cin >> n;
        // [3] 循环处理每组测试数据,共n组
        for (int i = 0; i < n; i++) {
            // [4] 循环输入每组的4个数字,存入全局基础数组nums
            for (int j = 0; j < 4; j++) {
                cin >> nums[j];
            }
            // [5] 启动深搜:从第1个数字(索引1)开始,初始累计结果为第0个数字,满足则计数+1
            if (dfs(1, nums[0])) {
                count++;
            }
        }
        // [13] 所有组处理完毕,输出能算出24的总组数
        cout << count << endl;
        return 0;
    }
    
    • 1

    信息

    ID
    1273
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者