কম্পিউটার

পাইথনে তিনটি অপারেশন করে অ্যারের যোগফল K করা যায় কিনা তা পরীক্ষা করুন


ধরুন আমাদের কাছে সংখ্যা নামক সংখ্যার একটি তালিকা রয়েছে এবং একটি ধনাত্মক মান Kও রয়েছে। আমরা এই তিনটি ক্রিয়াকলাপের যে কোনো একটি সংখ্যায় করতে পারি -

  • একটি সংখ্যা ঋণাত্মক করুন,
  • সংখ্যার সূচী যোগ করুন (সূচী 1 থেকে শুরু করুন) সংখ্যাটিতে নিজেই
  • সংখ্যা থেকেই সংখ্যার সূচী বিয়োগ করুন।

পরিশেষে, প্রতিটি উপাদানে শুধুমাত্র একবার এই ক্রিয়াকলাপগুলি সম্পাদন করার মাধ্যমে অ্যারের যোগফল k হয়ে যাওয়ায় প্রদত্ত অ্যারেটি রূপান্তরিত হতে পারে কিনা তা আমাদের পরীক্ষা করতে হবে৷

সুতরাং, যদি ইনপুটটি nums =[1,2,3,7] k =8 এর মত হয়, তাহলে আউটপুটটি True হবে কারণ আমরা [1, 0, এর মতো অ্যারে তৈরি করতে 2 এবং 3 থেকে 2 এবং 3 এর সূচক বিয়োগ করতে পারি। 0, 7], তাই এখন যোগফল 8 =k।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • আকার :=100
  • একটি ফাংশন is_ok() সংজ্ঞায়িত করুন। এটি i, total, k, nums, table
  • নেবে
  • n :=সংখ্যার আকার
  • যদি মোট <=0 হয়, তাহলে
    • মিথ্যে ফেরত দিন
  • যদি i>=n, তাহলে
    • যদি মোট k এর সমান হয়, তাহলে
      • সত্য ফেরান
  • মিথ্যে ফেরত দিন
  • যদি টেবিল[i, মোট] -1 না হয়, তাহলে
    • রিটার্ন টেবিল[i, মোট]
  • টেবিল[i, মোট] :=1 যখন (is_ok(i+1, মোট - 2 * nums[i], k, nums, table) অ-শূন্য বা is_ok(i+1, মোট, k, সংখ্যা, টেবিল) অ-শূন্য), অন্যথায় 0
  • টেবিল[i, মোট] :=1 যখন (is_ok(i+1, total -(i+1) , k, nums, table) অথবা table[i, total]), অন্যথায় 0
  • টেবিল[i, মোট] :=1 যখন (is_ok(i+1, total + i + 1, k, nums, table) অথবা table[i, total]), অন্যথায় 0
  • রিটার্ন টেবিল[i, মোট]
  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
  • মোট :=সংখ্যায় সমস্ত উপাদানের যোগফল
  • টেবিল :=আকারের সমান দৈর্ঘ্যের একটি অ্যারে এবং -1 দিয়ে পূরণ করুন
  • আমি 0 থেকে আকারের রেঞ্জের জন্য,
      করুন
    • টেবিল[i] :=আকারের সমান দৈর্ঘ্যের একটি অ্যারে এবং -1 দিয়ে পূরণ করুন
  • রিটার্ন is_ok(0, total, k, nums, table)

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

size = 100
def is_ok(i, total, k, nums, table):
   n = len(nums)
   if total <= 0:
      return False
   if i >= n:
      if total == k:
         return True
      return False
   if table[i][total] != -1:
      return table[i][total]
   table[i][total] = is_ok(i+1, total - 2 * nums[i], k, nums, table) or is_ok(i+1, total, k, nums, table)
   table[i][total] = is_ok(i+1, total - (i+1), k, nums, table) or table[i][total] table[i][total] = is_ok(i+1, total + i + 1, k, nums, table) or table[i][total]
   return table[i][total]
def solve(nums, k):
   total = sum(nums)
   table = [-1]*size
   for i in range(size):
      table[i] = [-1]*size
   return is_ok(0, total, k, nums, table)
nums = [1,2,3,7]
k = 8
print(solve(nums, k))

ইনপুট

[1,2,3,7], 8

আউটপুট

True

  1. একটি সাজানো অ্যারেকে জোড়ায় ভাগ করা যায় কিনা পরীক্ষা করুন যার যোগফল পাইথনে k

  2. আমরা পাইথনে সমান যোগফল দিয়ে দুটি পার্টিশনের গ্রুপ করতে পারি কিনা তা পরীক্ষা করার জন্য প্রোগ্রাম?

  3. প্রোগ্রাম চেক করার জন্য আমরা তিনটি অনন্য উপাদান খুঁজে পেতে পারি এবং যোগফল k বা পাইথনের মতো নয়

  4. প্রোগ্রাম চেক করার জন্য আমরা চারটি উপাদান খুঁজে পেতে পারি যার যোগফল পাইথনে k বা নয়