কম্পিউটার টিউটোরিয়াল

পাইথনে যাচাই করুন অ্যারে জোড়ায় ভাগ করা যায় কিনা যাতে প্রতিটি জোড়ার যোগফল k দ্বারা বিভাজ্য

ধরুন, একটি সংখ্যা অ্যারে এবং একটি সংখ্যা k দেওয়া হয়েছে। আমাদের যাচাই করতে হবে যে অ্যারেটি কি জোড়ায় ভাগ করা যায় যাতে প্রতিটি জোড়ার যোগফল k দ্বারা বিভাজ্য হয়।

যেমন, ইনপুট arr = [5, 15, 6, 9], k = 7 হলে আউটপুট হবে True, কারণ জোড়াগুলো হতে পারে (5, 9) এবং (15, 6)।

সমাধানের ধাপসমূহ

  • n = len(array)। যদি n বিজোড় হয়, তবে False ফেরত দিন।
  • occurrences নামক একটি ডিকশনারি (ডিফল্ট ০) নিন।
  • প্রতিটি এলিমেন্টের জন্য remainder = ((array[i] % k) + k) % k হিসাব করুন এবং occurrences[remainder] বাড়ান।
  • আবার লুপ চালান:
    • remainder = ((array[i] % k) + k) % k।
    • যদি 2 * remainder == k হয় এবং occurrences[remainder] বিজোড় হয়, তবে False।
    • যদি remainder == 0 হয় এবং occurrences[remainder] বিজোড় হয়, তবে False।
    • যদি occurrences[remainder] != occurrences[k - remainder] হয়, তবে False।
  • সব চেক পাস করলে True ফেরত দিন।

উদাহরণ কোড

from collections import defaultdict

def solve(array, k):
    n = len(array)
    if n % 2 != 0:
        return False
    occurrences = defaultdict(lambda: 0)
    for i in range(n):
        occurrences[((array[i] % k) + k) % k] += 1
    for i in range(n):
        remainder = ((array[i] % k) + k) % k
        if (2 * remainder == k):
            if (occurrences[remainder] % 2 != 0):
                return False
        elif (remainder == 0):
            if (occurrences[remainder] & 1):
                return False
        elif (occurrences[remainder] != occurrences[k - remainder]):
            return False
    return True

arr = [5, 15, 6, 9]
k = 7
print(solve(arr, k))

ইনপুট

[5, 15, 6, 9], 7

আউটপুট

True
  1. পাইথনে যোগফল ১ হয় এমন ফ্র্যাকশন জোড়ার সংখ্যা বের করার প্রোগ্রাম

  2. পাইথনে ট্রিপলেট কাউন্ট যাদের যোগফল টার্গেটের চেয়ে ছোট (3Sum Smaller)

  3. পাইথনে চারটি ইউনিক এলিমেন্ট যাদের যোগফল ঠিক k (4Sum Exact)

  4. পাইথনে অ্যারেকে সমান যোগফলवाले সাবঅ্যারে-এ ভাগ করার যোগফল মানগুলো বের করুন