Atcoder Beginner Contest 079 C

题目链接:C - Train Ticket
题意:你现在有(a,b,c,d)四个数字,你想通过在(a,b)(b,c)(c,d)之间添加(+)(-)(必须添加),是这四个数的运算结果为7,保证有解,求这个式子(如有多个,输出其中一个即可)。
题解:一道十分明显的暴搜题,只需要二进制枚举一下就可以了(当然,如果有神仙要一个一个判断也是可以的)。由于范围过小,我便直接DFS了,代码方便不少。
下面是代码:

#include <cstdio>
int a[10];
int ans[10];
bool get;
void dfs(int x,int sum){
	if(x==4){
		if(sum==7){
			get=1;
		}
		return;
	}
	if(get){
		return;
	}
	ans[x]=-1;
	dfs(x+1,sum-a[x+1]);
	if(get){
		return;
	}
	ans[x]=1;
	dfs(x+1,sum+a[x+1]);
	if(get){
		return;
	}
	ans[x]=0;
}
int main(){
	for(int i=1;i<=4;i++){
		scanf("%1d",&a[i]);
	}
	dfs(1,a[1]);
	for(int i=1;i<4;i++){
		printf("%d%c",a[i],(ans[i]==-1?'-':'+'));
	}
	printf("%d=%d
",a[4],7);
	return 0;
}
原文地址:https://www.cnblogs.com/withhope/p/11129978.html