मान लीजिए हमारे पास चार कार्ड हैं; इन कार्डों में 1 से 9 तक कुछ संख्याएँ हैं। हमें यह जाँचना होगा कि क्या वे 24 प्राप्त करने के लिए +, -, *, / जैसे कुछ ऑपरेटरों के माध्यम से काम कर सकते हैं। इसलिए यदि हमारे पास कुछ संख्याएँ हैं जैसे [4,9,2,6 ], तो हम 24 गुणा (4 * 9) – (2 * 6) प्राप्त कर सकते हैं, उत्तर सत्य होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एप्सिलॉन:=10.0^-5
- एक फ़ंक्शन को हल करें परिभाषित करें (), यह एक सरणी v लेगा,
- यदि v का आकार 1 के समान है, तो −
- सही लौटें जब |v[0] - 24.0| <=एप्सिलॉन
- इनिशियलाइज़ i :=0 के लिए, जब i
करें - इनिशियलाइज़ j :=0 के लिए, जब j
करें - यदि i, j के समान है, तो:निम्नलिखित भाग पर ध्यान न दें, अगले पुनरावृत्ति पर जाएं
- एक सरणी रेस परिभाषित करें
- इनिशियलाइज़ k :=0 के लिए, जब k
- यदि i, k के बराबर नहीं है और j, k के बराबर नहीं है, तो −
- रेस के अंत में v[k] डालें
- इनिशियलाइज़ j :=0 के लिए, जब j
- करें
- यदि ऑपरेटर [k] '+' के समान है, तो −
- रेस के अंत में v[i] + v[j] डालें
- अन्यथा जब ऑपरेटर[k] '-' के समान हो, तो −
- रेस के अंत में v[i] - v[j] डालें
- अन्यथा जब ऑपरेटर[k] '*' के समान हो, तो −
- रेस के अंत में v[i] * v[j] डालें
- अन्यथा
- रेस के अंत में v[i] / v[j] डालें
- यदि हल करें(res), तो −
- सही लौटें
- Res से अंतिम तत्व हटाएं
- v के अंत में nums[i] डालें
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: char operators[4] = {'+', '-', '/', '*'}; double epsilon = pow(10.0, -5); bool judgePoint24(vector<int>& nums) { vector <double> v; for(int i = 0; i < nums.size(); i++){ v.push_back(nums[i]); } return solve(v); } bool solve(vector <double> v){ if(v.size() == 1){ return abs(v[0] - 24.0) <= epsilon; } for(int i = 0; i < v.size(); i++){ for(int j = 0; j < v.size(); j++){ if(i == j) continue; vector <double> res; for(int k = 0; k < v.size(); k++){ if(i != k && j != k){ res.push_back(v[k]); } } for(int k = 0; k < 4; k++){ if(operators[k] == '+'){ res.push_back(v[i] + v[j]); }else if(operators[k] == '-'){ res.push_back(v[i] - v[j]); }else if(operators[k] == '*'){ res.push_back(v[i] * v[j]); }else{ res.push_back(v[i] / v[j]); } if(solve(res)) return true; res.pop_back(); } } } return false; } }; main(){ Solution ob; vector<int> v = {4,9,2,6}; cout << (ob.judgePoint24(v)); }
इनपुट
{4,9,2,6}
आउटपुट
1