#include <iostream> #include <vector> using namespace std; int count = 0; // 全局变量,用于计数方案数 // 辅助函数,递归计算所有可能的表达式结果 void calculate(const vector<int>& nums, int index, int currentResult) { // 如果已经处理完所有数字 if (index == nums.size()) { // 如果当前结果等于24,则增加方案数 if (currentResult == 24) { count++; } return; } // 对于当前位置之后的每一个数字,尝试进行加、减、乘操作 for (int i = index; i < nums.size(); ++i) { // 加法 calculate(nums, i + 1, currentResult + nums[i]); // 减法(注意要检查减法不会导致负数,因为题目中的数字都是正数) if (currentResult >= nums[i]) { calculate(nums, i + 1, currentResult - nums[i]); } // 乘法 calculate(nums, i + 1, currentResult * nums[i]); // 如果当前数字是第一个操作数,则跳过其余的操作(因为顺序不能改变) if (i == index) { continue; } // 否则,我们已经尝试过使用当前数字作为第二个操作数,可以退出循环 break; } } int main() { int n; cin >> n; vector<int> nums(n); for (int i = 0; i < n; ++i) { cin >> nums[i]; } // 从第一个数字开始,初始结果为该数字的值 calculate(nums, 1, nums[0]); // 输出方案数 cout << count << endl; return 0; } /************************************************************** Problem: 1956 User: wuyunfeng Language: C++ Result: Wrong Answer ****************************************************************/