/* ID: richard20 PROG: zerosum LANG: C++ */ using namespace std; #include #include #include #include int n = 9; int spm [9]; vector parts; vector answers; char code [3] = {' ','+','-'}; int temp; int m; int sum; string tmp; void recurse(int v = 0) { if (v == n-1) { //for (int i = 0 ; i < n-1 ; i++) // cout << spm[i]; //cout << endl; parts.clear(); temp = 1; m = 1; //cout << temp << endl; for (int i = 0; i < n-1 ; i++) { //cout << spm[i] << ":"; if (spm[i] == 0) // space { temp *= 10; temp += i+2; } else { parts.push_back(temp*m); temp = i+2; if (spm[i] == 2) // minus m = -1; else m = 1; } //cout << temp << endl; } parts.push_back(temp*m); sum = 0; for (int i = 0 ; i < parts.size() ; i++) sum += parts[i]; if (sum == 0) { tmp = ""; for (int i = 0 ; i < n-1 ; i++) { tmp += (char)('0'+(i+1)); tmp += code[spm[i]]; } tmp+=(char)('0'+n); //cout << tmp << endl; answers.push_back(tmp); } return; } for (int i = 0; i < 3 ; i++) { recurse(v+1); spm[v]++; } spm[v]=0; } int main () { ifstream in ("zerosum.in"); fill (spm, spm+9,0); //last = n-1; in >> n; //cout << n << endl;; recurse(); ofstream out("zerosum.out"); for (int i = 0 ; i < answers.size(); i++) out << answers[i] << endl; out.close(); return 0; }