aboutsummaryrefslogtreecommitdiff
path: root/recursionTest/recursionTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'recursionTest/recursionTest.cpp')
-rw-r--r--recursionTest/recursionTest.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/recursionTest/recursionTest.cpp b/recursionTest/recursionTest.cpp
new file mode 100644
index 0000000..91e9db8
--- /dev/null
+++ b/recursionTest/recursionTest.cpp
@@ -0,0 +1,51 @@
+#include <algorithm>
+#include<bits/stdc++.h>
+
+using namespace std;
+
+string ans;
+
+bool solve(vector<int> v,int idx, int target, int sum, string opts) {
+ if(idx == v.size() - 1) {
+ if(sum == target){
+ ans = opts;
+ return true;
+ }
+ return false;
+ }
+ else {
+ int nxt = idx + 1;
+ bool plus = solve(v, nxt, target, sum + v[nxt],opts + "+");
+ bool minus = solve(v, nxt, target, sum - v[nxt], opts + "-");
+ bool mult = solve(v, nxt, target, sum * v[nxt], opts + "*");
+ bool div = solve(v, nxt, target, sum / v[nxt], opts + "/");
+ return plus || minus || mult || div;
+ }
+
+}
+
+int main() {
+ int n, target;
+ cin >> n >> target;
+ vector<int> v(n);
+ string opts = "";
+ for(int &x : v) {
+ cin >> x;
+ }
+ sort(v.begin(), v.end());
+ do {
+ if(solve(v, 0, target, v[0], opts)) {
+ for(int i = 0; i < v.size(); i++) {
+ if (i == v.size() - 1) {
+ cout << v[i];
+ }
+ else {
+ cout << v[i] << " " << ans[i] << " ";
+ }
+ }
+ cout << '\n';
+ }
+ } while(next_permutation(v.begin(), v.end()));
+
+ return 0;
+}