ধরুন আমাদের একটি সংখ্যার বিন্যাস আছে এবং আরেকটি সংখ্যা k আছে, আমাদের পরীক্ষা করতে হবে যে প্রদত্ত অ্যারেকে জোড়ায় ভাগ করা যায় যাতে প্রতিটি জোড়ার যোগফল k দ্বারা বিভাজ্য হয় বা না হয়।
সুতরাং, যদি ইনপুট হয় arr =[5, 15, 6, 9] k =7, তাহলে আউটপুটটি True হবে কারণ আমরা (5, 9) এবং (15, 6) এর মতো জোড়া নিতে পারি।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- n :=অ্যারের আকার
- যদি n বিজোড় হয়, তাহলে
- মিথ্যে ফেরত দিন
- ঘটনা :=একটি খালি অভিধান, যদি কিছু কী না থাকে তাহলে সেই অনুপস্থিত কীটির মান হিসাবে 0 ফেরত দেয়
- আমি 0 থেকে n রেঞ্জের জন্য, কর
- ঘটনাগুলি [((অ্যারে[i] mod k) + k) mod k] 1 দ্বারা বৃদ্ধি করুন
- আমি 0 থেকে n রেঞ্জের জন্য, কর
- অবশিষ্ট :=((অ্যারে[i] mod k) + k) mod k
- যদি 2 * অবশিষ্টাংশ k এর সমান হয়, তাহলে
- যদি ঘটনা [বাকি] বিজোড় হয়, তাহলে
- মিথ্যে ফেরত দিন
- যদি ঘটনা [বাকি] বিজোড় হয়, তাহলে
- অন্যথায় যখন অবশিষ্টাংশ 0 এর সমান হয়, তখন
- যদি ঘটনা [অবশিষ্ট] এবং 1 অ-শূন্য হয়, তাহলে
- মিথ্যে ফেরত দিন
- যদি ঘটনা [অবশিষ্ট] এবং 1 অ-শূন্য হয়, তাহলে
- অন্যথায় যখন সংঘটন[অবশিষ্ট] ঘটনা [k - অবশিষ্ট] এর মতো না হয়, তখন
- মিথ্যে ফেরত দিন
- সত্য ফেরান
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
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(0, n): occurrences[((array[i] % k) + k) % k] += 1 for i in range(0, 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