मान लीजिए हमारे पास चार कार्ड हैं; इन कार्डों में 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