2017-9-11
题目描述
给你1到N,以及'+' '-' ' ',顺序输出所有经过运算后得到0的情况
解答
深度搜索即可
代码
/*
ID: 18795871
PROG: zerosum
LANG: C++
*/
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
const int N = 10;
ifstream fin("zerosum.in");
ofstream fout("zerosum.out");
int n;
char x[N+1],z[N+1];
int y[N+1];
void dfs(int k){
if (k==n){
for (int i=1;i<=n;i++){
y[i]=i;
z[i]=x[i];
}
for (int i=1;i<n;i++){
if (z[i]==' '){
y[i]=10*i+(i+1);
y[i+1]=0;
z[i]='+';
}
}
int i,j=y[1];
for (i=1;i<n;i++){
if (z[i]=='+') j=j+y[i+1];
else j=j-y[i+1];
}
if (j==0){
for (i=1;i<n;i++){
fout<<i<<x[i];
}
fout<<i<<endl;
}
return ;
}
if (x[k-1]!=' '){
x[k]=' ';
dfs(k+1);
}
x[k]='+';
dfs(k+1);
x[k]='-';
dfs(k+1);
}
int main(){
fin>>n;
dfs(1);
return 0;
}