#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
****************************************************************/