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

C++-এ জোড় যোগফল বিশিষ্ট সাবঅ্যারের সর্বোচ্চ দৈর্ঘ্য


আমাদের একটি অ্যারে Arr[] দেওয়া আছে। লক্ষ্য হল Arr[]-এর সবচেয়ে দীর্ঘ দৈর্ঘ্যের সাবঅ্যারে খুঁজে বের করা যেন সেই সাবঅ্যারের উপাদানগুলোর যোগফল জোড় হয়। অর্থাৎ, একটি সাবঅ্যারের উপাদানগুলোর যোগফল জোড় এবং সেই সাবঅ্যারেটিই দৈর্ঘ্যে সর্বোচ্চ।

উদাহরণ দিয়ে বোঝা যাক

ইনপুট - Arr[] = { 2,3,5,2,6,7 }

আউটপুট - সাবঅ্যারের সর্বোচ্চ দৈর্ঘ্য - ৪

ব্যাখ্যা - সর্বোচ্চ দৈর্ঘ্যের সাবঅ্যারে হল { 5,2,6,7 }। যোগফল ২০ যা জোড়।

ইনপুট - Arr[] = { 5,7,7,3,4 }

আউটপুট - সাবঅ্যারের সর্বোচ্চ দৈর্ঘ্য - ৪

ব্যাখ্যা - সর্বোচ্চ দৈর্ঘ্যের সাবঅ্যারে হল { 5,7,7,3 }। যোগফল ২২ যা জোড়।

প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • ইন্টিজার অ্যারে Arr[] ব্যবহার করা হয়েছে ইন্টিজার সংরক্ষণের জন্য।

  • size ভেরিয়েবল ব্যবহার করা হয়েছে অ্যারের দৈর্ঘ্য সংরক্ষণের জন্য।

  • Length( int arr[] ) ফাংশন অ্যারের যোগফল জোড় কিনা চেক করে। Leng ভেরিয়েবল সাবঅ্যারের দৈর্ঘ্য সংরক্ষণ করে।

  • পুরো অ্যারের যোগফল বের করুন, যদি জোড় হয় তবে অ্যারের দৈর্ঘ্য n ফেরত দিন।

  • এখন প্রথম উপাদান থেকে পুরো অ্যারে ট্রাভার্স করুন, যদি কোনো বিজোড় উপাদান পাওয়া যায় তবে arr[i] বাদ দিয়ে দুটি অর্ধেকের দৈর্ঘ্য তুলনা করুন।

  • সাবঅ্যারের দৈর্ঘ্যের জন্য সর্বোচ্চ দৈর্ঘ্য ফেরত দিন।

C++ প্রোগ্রাম উদাহরণ

#include<iostream>
int Length(int arr[], int n){
    int sum = 0, leng = 0;
    // পুরো অ্যারে জোড় হলে
    for (int i = 0; i < n; i++)
        sum += arr[i];
    if (sum % 2 == 0) // মোট যোগফল ইতিমধ্যে জোড়
        return n;
    // এমন একটি ইনডেক্স i খুঁজুন যাতে a[i] বিজোড়
    // এবং arr[i] বাদ দিয়ে দুটি অর্ধেকের দৈর্ঘ্য তুলনা করে
    // সর্বোচ্চ দৈর্ঘ্যের সাবঅ্যারে বের করুন
    for (int i = 0; i < n; i++) {
        if (arr[i] % 2 == 1)
            leng = i>n-i-1?i:n-i-1;
    }
    return leng;
}

int main(){
    int Arr[] = { 1, 2, 6, 2, 4,2 };
    int size = 6;
    printf("Maximum length of subarray such that sum of the subarray is even: %d",Length(Arr, size));
    return 0;
}

আউটপুট

Maximum length of subarray such that sum of the subarray is even : 5
  1. সি++-এ একই শুরু ও শেষ মান دار সর্বোচ্চ যোগফল সাবঅ্যারে বের করা

  2. লাগাতার তিনটি না হলে সর্বোচ্চ সাবসিকোয়েন্স যোগফল (C++ প্রোগ্রাম)

  3. সর্বোচ্চ সাবঅ্যারে আকার যাতে সকল সাবঅ্যারের যোগফল k-এর চেয়ে কম (C++ প্রোগ্রাম)

  4. বাইনারি ট্রিতে সর্বোচ্চ সাব-ট্রি যোগফল যেটি BST ও (C++ প্রোগ্রাম)