加减乘 计蒜客 深度优先搜索

题目 加减乘

请对于下面式子进行填空,填入加减乘,使这个表达式成立。
在这里插入图片描述
请输出一共有多少种方案可以使得表达式成立。

思路

思路:若第一个空填+,则下一步分别有加减乘三种填法。本题容易忽略乘法的优先级问题,需要对乘号特殊处理。

结果

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值