设为首页 加入收藏

TOP

寻找表达式
2014-11-23 17:30:25 来源: 作者: 【 】 浏览:16
Tags:寻找 表达式

题目描述:
现在有一个序列123......N,其中N介于3和15之间,要求在序列之间加入+、-或者空格,使得该序列组成的数学表达式的运算结果为0。

输入:
输入可能包含多个测试样例。
对于每个测试案例,输入整数N(3<=N<=15),代表这个序列的长度。

输出:
对应每个测试案例,输出所有使得表达式结果为0的组合,当有多个组合时,按字典序进行排序输出。

样例输入:
3
6样例输出:
1+2-3
1 2+3-4-5-6提示:
1_2+3-4-5-6相当于12+3-4-5-6(‘_’代表空格

#include 

int op[20];
char s[3] = {'+','-',' '};
int n;
void dfs(int layer,int currentSum,int lastOp,int lastSum){
	lastSum *= (layer > 9   100 : 10);
	lastSum += layer;
	if(layer == n){
		currentSum += (lastOp)   (-1 * lastSum) : lastSum;
		if(currentSum == 0){
			printf("1");
			for(int i = 2;i <= n;i++)
				printf("%c%d",s[op[i - 1]],i);
			printf("\n");
		}
		return;
	}

	op[layer] = 2;
	dfs(layer + 1,currentSum,lastOp,lastSum);
	currentSum += (lastOp)   (-1 * lastSum) : lastSum;
	op[layer] = 0;
	dfs(layer + 1,currentSum,0,0);
	op[layer] = 1;
	dfs(layer + 1,currentSum,1,0);
}


int main(){
	while(scanf("%d",&n) != EOF){
		dfs(1,0,0,0);
	}
	return 0;
}

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ 1287 Networking 下一篇hdu 2074

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·About - Redis (2025-12-26 08:20:56)
·Redis: A Comprehens (2025-12-26 08:20:53)
·Redis - The Real-ti (2025-12-26 08:20:50)
·Bash 脚本教程——Li (2025-12-26 07:53:35)
·实战篇!Linux shell (2025-12-26 07:53:32)