题目描述
给出
�
n 个整数,请问这
�
n 个数字在不改变顺序且不加入括号的情况下,仅通过 +−× 三种运算符,
有多少种运算能得到 24 。
比如:4 10 24 8,有如下 3种运算能够得到24 。
4+10-2+4+8=24
4-10-2+4*8=24
4*10-2*4-8=24
输入
第 1 行有一个整数 n ;(2≤n≤10)
第 2 行有 n 个整数 (1≤ai≤20)
输出
一个整数,代表能计算出 24 点的方案数;
样例
输入
5
4 10 2 4 8
输出
3
#include<iostream>
#include<cstring>
using namespace std;
int a[30],b[30];
int n,ans;
char s[30];
string t="+-*";
void qwq(){
for(int i=1;i<=n;i++){
b[i]=a[i];
}
for(int i=1;i<=n-1;i++){
if(s[i]=='-'){
b[i+1]=-b[i+1];
}else if(s[i]=='*'){
b[i+1]*=b[i];
b[i]=0;
}
}
long long sum=0;
for(int i=1;i<=n;i++){
sum+=b[i];
}
if(sum==24){
ans++;
}
}
void dfs(int k){
for(int i=0;i<3;i++){
s[k]=t[i];
if(k==n-1){
qwq();
}
else{
dfs(k+1);
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
dfs(1);
cout<<ans;
}