ধরুন আমাদের চারটি কার্ড আছে; এই কার্ডগুলিতে 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