ধরুন আমাদের চারটি সংখ্যার একটি তালিকা রয়েছে, প্রতিটি সংখ্যা একটি নির্দিষ্ট ক্রমে 1 থেকে 9 পর্যন্ত রয়েছে। এখন যদি আমরা অপারেটরগুলি +, -, *, এবং / (/ পূর্ণসংখ্যা বিভাজন বোঝায়) সংখ্যাগুলির মধ্যে রাখি এবং বন্ধনী দিয়ে তাদের গোষ্ঠীবদ্ধ করি, তাহলে আমাদের পরীক্ষা করতে হবে যে মান 24 পাওয়া সম্ভব কি না।
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[5, 3, 6, 8, 7], তাহলে আউটপুটটি True হবে, যেমন (5 * 3) - 6 + (8 + 7) =24।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন recur() সংজ্ঞায়িত করুন। এটি arr লাগবে
- উত্তর :=একটি নতুন তালিকা
- এর জন্য 0 থেকে arr - 1 এর আকারের মধ্যে, do
- pre :=recur(arr[index 0 থেকে i])
- suf :=recur (arr[index i + 1 থেকে শেষ পর্যন্ত])
- প্রি-তে প্রতিটি k-এর জন্য, করুন
- সুফের প্রতিটি j-এর জন্য, করুন
- উত্তরের শেষে (k + j) ঢোকান
- উত্তরের শেষে (k - j) সন্নিবেশ করুন
- উত্তরের শেষে (k * j) সন্নিবেশ করুন
- যদি 0 না হয়, তাহলে
- উত্তরের শেষে সন্নিবেশ (k / j এর ভাগফল)
- সুফের প্রতিটি j-এর জন্য, করুন
- যদি উত্তরের আকার 0 হয় এবং arr-এর আকার 1 হয়, তাহলে
- উত্তরের শেষে arr[0] ঢোকান
- উত্তর ফেরত দিন
- প্রধান পদ্ধতি থেকে 24 পুনরাবৃত্ত (সংখ্যা) আছে কি না তা পরীক্ষা করে দেখুন, যদি হ্যাঁ রিটার্ন করুন True, অন্যথায় মিথ্যা
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution: def solve(self, nums): def recur(arr): answer = [] for i in range(len(arr) - 1): pre, suf = recur(arr[: i + 1]), recur(arr[i + 1 :]) for k in pre: for j in suf: answer.append(k + j) answer.append(k - j) answer.append(k * j) if j != 0: answer.append(k // j) if len(answer) == 0 and len(arr) == 1: answer.append(arr[0]) return answer return 24 in recur(nums) ob = Solution() nums = [5, 3, 6, 8, 7] print(ob.solve(nums))
ইনপুট
[5, 3, 6, 8, 7]
আউটপুট
True