ধরুন আমাদের চারটি কার্ড আছে; এই কার্ডগুলিতে 1 থেকে 9 পর্যন্ত কিছু সংখ্যা রয়েছে। আমাদের চেক করতে হবে যে তারা 24 পাওয়ার জন্য +, -, *, /, এর মতো কিছু অপারেটরের মাধ্যমে কাজ করতে পারে কিনা। তাই যদি আমাদের কিছু সংখ্যা থাকে যেমন [4,9,2,6 ], তাহলে আমরা (4 * 9) - (2 * 6) দ্বারা 24 পেতে পারি, উত্তরটি সত্য হবে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- এপসিলন :=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 এর সমান না হয়, তাহলে −
- res এর শেষে v[k] ঢোকান
- আরম্ভ করার জন্য j :=0, যখন j
- করুন
- যদি অপারেটর[k] '+' এর মত হয়, তাহলে −
- res এর শেষে v[i] + v[j] ঢোকান
- অন্যথায় যখন অপারেটর[k] '-' এর মত হয়, তখন −
- res এর শেষে v[i] - v[j] ঢোকান
- অন্যথায় যখন অপারেটর[k] '*' এর মত হয়, তখন −
- res এর শেষে v[i] * v[j] ঢোকান
- অন্যথায়
- res এর শেষে 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