记录编号 51558 评测结果 AAAAAAA
题目名称 [USACO 2.3.3]零数列 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.002 s
提交时间 2012-12-26 15:37:52 内存使用 0.31 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int s[22]={1,2,3,4,5,6,7,8,9},sign[22]={1};//数字和其前方符号,一一对应
int n;
int sum(void){
	int sum=0,i,now,index;
	now=0,index=1;
	for(i=n-1;i>=0;i--){
		now+=s[i]*index;
		if(sign[i]==0){
			index*=10;
			continue; 
		}
		else{
			sum+=now*sign[i];
			now=0,index=1;
		}
	}
	return sum;
}
void dfs(int p){//下标为p的已经决定	
	int i;
	if(p==n-1){
		if(sum()==0){
			printf("%d",s[0]);
			for(i=1;i<n;i++){
				if(sign[i]==1) printf("+");
				else if(sign[i]==-1) printf("-");
				else printf(" ");
				printf("%d",s[i]);
			}
			printf("\n");
		}
		return;
	}
	//注意:ascii码中' '<'+'<'-'
	sign[p+1]=0,dfs(p+1);
	sign[p+1]=1,dfs(p+1);
	sign[p+1]=-1,dfs(p+1);
}
int main(){
	freopen("zerosum.in","r",stdin);
	freopen("zerosum.out","w",stdout);
	scanf("%d",&n);
	dfs(0);
	return 0;
}