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

C++-এ অ্যারে সমানভাবে ভাগ করার জন্য মিনিমাম পজিটিভ ইন্টিজার


সমস্যা বিবরণ

N পজিটিভ ইন্টিজারের একটি অ্যারে দেওয়া আছে। টাস্ক হলো সবচেয়ে ছোট পজিটিভ ইন্টিজার বের করা যেটি অ্যারে-এর যেকোনো দুটি এলিমেন্টের মাঝপথে রাখলে, সেটি মাঝপথে থাকা দুটি সাবঅ্যারে-এর সম সমান হয় (নতুন ইন্টিজারটি যেকোনো একটি সাবঅ্যারেতে থাকবে)।

উদাহরণ

যদি arr = {3, 2, 1, 5, 7, 10} হয়, তবে আউটপুট ৬। যদি ৫ এবং ৭-এর মাঝপথে ৬ রাখা হয়, তবে বাম ও ডান সাবঅ্যারে-এর সম সমান হয়:

3 + 2 + 1 + 5 + 6 = 17

7 + 10 = 17

অ্যালগরিদম

  • পুরো অ্যারে-এর সম S মনে করুন
  • আইডিয়া হলো ইনডেক্স i পর্যন্ত (সেটি ইনক্লুড করে) লেফট সম বের করা। এই সমকে L বলুন
  • এখন সাবঅ্যারে arr[i+1] .. N-এর সম হলো S – L। এই সমকে R বলুন
  • যেহেতু দুটি সাবঅ্যারে-এর সম সমান হওয়া উচিত, উপরের দুটি সম L এবং R-র মধ্যে বড়টাকে ছোটটার মানটাতে রিডিউস করতে হবে এবং বড় সম ও ছোট সমের ডিফারেন্সই রিকোয়ার্ড পজিটিভ ইন্টিজার যা দরকার।

উদাহরণ

#include <iostream> 
#include <numeric> 
#include <climits> 
using namespace std; 

int getMinimumSplitPoint(int *arr, int n) { 
    int sum = 0; 
    sum = accumulate(arr, arr + n, sum); 
    int leftSum = 0; 
    int rightSum = 0; 
    int minValue = INT_MAX; 
    for (int i = 0; i < n - 1; ++i) { 
        leftSum += arr[i]; 
        rightSum = sum - leftSum; 
        if (leftSum > rightSum) { 
            int e = leftSum - rightSum; 
            if (e < minValue) { 
                minValue = e; 
            } 
        } else { 
            int e = rightSum - leftSum; 
            if (e < minValue) { 
                minValue = e; 
            } 
        } 
    } 
    return minValue; 
} 

int main() { 
    int arr[] = {3, 2, 1, 5, 7, 10}; 
    int n = sizeof(arr) / sizeof(arr[0]); 
    int minValue = getMinimumSplitPoint(arr, n); 
    cout << "Element " << minValue << " needs to be inserted\n"; 
    return 0; 
}

আউটপুট

যখন আপনি উপরের প্রোগ্রাম কম্পাইল ও এক্সিকিউট করবেন। এটি নিচের আউটপুট জেনারেট করবে:

Element 6 needs to be inserted

  1. C++-এ C দ্বারা বিভাজ্য এবং [A, B] রেঞ্জের মধ্যে সর্বোচ্চ ধনাত্মক পূর্ণসংখ্যা

  2. C++-এ অ্যারেকে সমান সম বিন্যাসে ভাগ করা দেওয়া শর্ত অনুযায়ী

  3. C++ তে ন্যূনতম এবসোলিউট ডিফারেন্স যোগফল ওয়ালা অ্যারে উপাদান

  4. C++-এ অ্যারেতে ন্যূনতম সংখ্যা যোগ করে যোগফল জোড় করার পদ্ধতি