1. 程式人生 > >(DFS)計蒜客——表示式填空

(DFS)計蒜客——表示式填空

請對於下面式子進行填空,填入加減乘,使這個表示式成立。

1  2  3  4  5  6  7  8  9  10 = 0

請輸出一共有多少種方案可以使得表示式成立

#include<iostream>
#include<stack>
using namespace std;

int num[10] = { 1,2,3,4,5,6,7,8,9,10 };
char s[9];

int ans;
void DFS(char *s, int k) {
	if (k == 9) {
		int cul = 0;
		stack<int> nu;
		stack<char> fu;
		nu.push(num[0]);
		for (int i = 0; i < 9; i++) {
			if (s[i] == '+' || s[i] == '-') {
				fu.push(s[i]);
				nu.push(num[i + 1]);
			}
			else {
				int ele = nu.top();
				nu.pop();
				ele *= num[i + 1];
				nu.push(ele);
			}
		}
		while (nu.size() > 1) {
			int ele = nu.top();
			nu.pop();
			char elef = fu.top();
			fu.pop();
			if (elef == '+') {
				cul += ele;
			}
			else {
				cul -= ele;
			}
		}
		cul += nu.top();
		if (cul == 0) {
			ans++;
			for (int i = 0; i < 9; i++) {
				cout << num[i] << s[i];
			}
			cout << num[9] << endl;
		}
		return;
	}
	s[k] = '*';
	DFS(s, k + 1);
	s[k] = '+';
	DFS(s, k + 1);
	s[k] = '-';
	DFS(s, k + 1);
}

int main() {
	DFS(s, 0);
	cout << ans;
	return 0;
}