কম্পিউটার

আমরা C++ এ সমান সমষ্টির k-পার্টিশনের সাথে একটি তালিকা ভাগ করতে পারি কিনা তা পরীক্ষা করার জন্য প্রোগ্রাম


ধরুন আমাদের কাছে nums নামে একটি সংখ্যার তালিকা রয়েছে এবং আরেকটি মান k, আমাদের পরীক্ষা করতে হবে যে সংখ্যাগুলিকে k বিভিন্ন উপসেটে ভাগ করা সম্ভব যেখানে প্রতিটি উপসেটের যোগফল একই।

সুতরাং, ইনপুট যদি nums =[4, 2, 6, 5, 1, 6, 3] k =3 এর মত হয়, তাহলে আউটপুট হবে True, যেমন আমরা সেগুলিকে এভাবে পার্টিশন করতে পারি:[6, 3], [6] , 2, 1], এবং [4, 5]।

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

  • একটি ফাংশন চেক সংজ্ঞায়িত করুন(), এটি একটি অ্যারে v নেবে,
  • আরম্ভ করার জন্য i :=1, যখন i
  • যদি v[i] v[0] এর সমান না হয়, তাহলে −
    • মিথ্যে ফেরত দিন
  • সত্যে ফিরে আসুন
  • একটি ফাংশন dfs() সংজ্ঞায়িত করুন, এটি idx, একটি অ্যারে সংখ্যা, একটি অ্যারে টেম্প,
  • যদি idx সংখ্যার আকারের সমান হয়, তাহলে −
    • রিটার্ন চেক(টেম্প)
  • ret :=মিথ্যা
  • আরম্ভ করার জন্য i :=0, যখন i করুন
  • temp[i] :=temp[i] + nums[idx]
  • ret :=dfs(idx + 1, nums, temp)
  • যদি ret সত্য হয়, তাহলে −
    • সত্যে ফিরে আসুন
  • temp[i] :=temp[i] - nums[idx]
  • মিথ্যে ফেরত দিন
  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
  • k আকারের একটি অ্যারের তাপমাত্রা সংজ্ঞায়িত করুন
  • রিটার্ন dfs(0, nums, temp)
  • উদাহরণ (C++)

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

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
       public:
       bool check(vector<int>& v) {
          for (int i = 1; i < v.size(); i++) {
             if (v[i] != v[0])
                return false;
          }
          return true;
       }
       bool dfs(int idx, vector<int>& nums, vector<int>& temp) {
          if (idx == nums.size()) {
             return check(temp);
          }
          bool ret = false;
          for (int i = 0; i < temp.size(); i++) {
             temp[i] += nums[idx];
             ret = dfs(idx + 1, nums, temp);
             if (ret)
                return true;
             temp[i] -= nums[idx];
          }
          return false;
       }
       bool solve(vector<int>& nums, int k) {
          vector<int> temp(k);
          return dfs(0, nums, temp);
       }
    };
    bool solve(vector<int>& nums, int k) {
       return (new Solution())->solve(nums, k);
    }
    int main(){
       vector<int> v = {4, 2, 6, 5, 1, 6, 3};
       int k = 3;
       cout << solve(v, 3);
    }

    ইনপুট

    {4, 2, 6, 5, 1, 6, 3}, 3

    আউটপুট

    1

    1. পাইথনে সমান যোগফল সহ 1s এবং 2s এর একটি অ্যারেকে 2 ভাগে ভাগ করা যায় কিনা তা পরীক্ষা করুন

    2. তালিকাকে জোড়ায় ভাগ করা যায় কিনা তা পরীক্ষা করার জন্য প্রোগ্রাম যেখানে যোগফল পাইথনে k-এর একাধিক

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

    4. পাইথনে তালিকা কঠোরভাবে বাড়ছে বা কঠোরভাবে কমছে কিনা তা পরীক্ষা করার জন্য প্রোগ্রাম