(DFS)計蒜客——表示式填空
阿新 • • 發佈:2018-12-13
請對於下面式子進行填空,填入加減乘,使這個表示式成立。
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; }