题目 加减乘
请对于下面式子进行填空,填入加减乘,使这个表达式成立。
请输出一共有多少种方案可以使得表达式成立。
思路
思路:若第一个空填+,则下一步分别有加减乘三种填法。本题容易忽略乘法的优先级问题,需要对乘号特殊处理。
结果
63
代码
#include<cstdio>
#include<iostream>
using namespace std;
int ans;
int deal(int a,char c,int b){
if(c=='+'){
return a+b;
}
if(c=='-'){
return a-b;
}
}
void dfs(int a,char c,int b,int step){
if(step==10){
if(deal(a,c,b)==0){
ans++;
}
return ;
}
dfs(deal(a,c,b),'+',step+1,step+1);//由于b可能由于乘法发生变化, 因此用step+1递归b
dfs(deal(a,c,b),'-',step+1,step+1);
dfs(a,c,b*(step+1),step+1);//如果出现乘号,则不计算a+b,而是a+b*(step+1),应该先计算乘号
}
int main(){
dfs(0,'+',1,1);
cout<<ans<<endl;
return 0;
}