ধরুন আমাদের n ভিন্ন সেকেন্ড মানের একটি অ্যারে আছে। 12'O ঘড়ি থেকে শুরু করা এবং শুধুমাত্র প্রদত্ত সেকেন্ড যোগ বা বিয়োগ করে 12 এ ফিরে যাওয়া সম্ভব কিনা তা আমাদের পরীক্ষা করতে হবে। আমরা প্রদত্ত সমস্ত সেকেন্ড ঠিক একবার ব্যবহার করতে পারি, আমরা হয় সেকেন্ড যোগ করতে পারি বা বিয়োগ করতে পারি।
সুতরাং, যদি ইনপুটটি সেকেন্ড =[40,90,50] এর মত হয়, তাহলে আউটপুটটি True হবে কারণ এটি 40 যোগ করতে পারে তারপর 90 বিয়োগ করতে পারে তারপর আবার 50 যোগ করতে পারে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- আকার :=2^(সেকেন্ড অ্যারের দৈর্ঘ্য)
- 0 থেকে সাইজ - 1 এর মধ্যে c এর জন্য, করুন
- যোগ করুন :=0 j-এর জন্য 0 থেকে সেকেন্ডের আকার - 1, করুন
- যদি c AND (2^j) অ-শূন্য হয়, তাহলে
- যোগ করুন :=যোগ করুন + সেকেন্ড[j]
- অন্যথায়,
- add :=add - সেকেন্ড[j]
- যদি যোগ (24 * 60) দ্বারা বিভাজ্য হয়, তাহলে
- সত্য ফেরান
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(seconds): size = 2**len(seconds) for c in range(size): add = 0 for j in range(len(seconds)) : if c & (1 << j): add += seconds[j] else: add -= seconds[j] if add % (24 * 60) == 0: return True return False seconds = [40,90,50] print(solve(seconds))
ইনপুট
[40,90,50]
আউটপুট
True