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

C++-এ দেওয়া অপারেশন দিয়ে অ্যারে যোগফল সর্বাধিক করা

বিবরণ

(2 * n - 1) সংখ্যক ইন্টিজারের একটি অ্যারে আছে। আমরা অ্যারেতে ঠিক n সংখ্যক উপাদানের চিহ্ন পরিবর্তন করতে পারি। অর্থাৎ, আমরা ঠিক n সংখ্যক অ্যারে উপাদান বেছে নিতে পারি এবং তাদের প্রতিটিকে -1 দিয়ে গুণ করতে পারি। অ্যারের সর্বোচ্চ যোগফল বের করুন।

উদাহরণ

যদি ইনপুট অ্যারে হয় {-2, 100, -3} তবে আমরা -2 এবং -3-এর চিহ্ন পরিবর্তন করে সর্বোচ্চ মান পেতে পারি। চিহ্ন পরিবর্তন করার পর অ্যারে হয়:

{2, 100, 3} এবং এই অ্যারের সর্বোচ্চ যোগফল হল ১০৫।

অ্যালগরিদম

  • নেগেটিভ সংখ্যাগুলোর গণনা করুন।
  • সংখ্যাগুলোর অ্যাবসোলিউট মান নিয়ে অ্যারের যোগফল বের করুন।
  • সংখ্যাগুলোর অ্যাবসোলিউট মান নিয়ে অ্যারের ন্যূনতম সংখ্যা বের করুন।
  • চেক করুন যে নেগেটিভ সংখ্যার সংখ্যা বিজোড় এবং n-এর মান জোড় কিনা, তবে যোগফল থেকে দুই গুন m বিয়োগ করুন এবং এটি হবে অ্যারের সর্বোচ্চ যোগফল, অন্যথায় যোগফলের মানই হবে অ্যারের সর্বোচ্চ যোগফল।
  • উপরোক্ত ধাপগুলো (2 * n - 1) বার दुহরান।

উদাহরণ

#include <bits/stdc++.h> 
using namespace std; 
int getMaxSum(int* arr, int n) { 
    int negtiveCnt = 0; 
    int sum = 0; 
    int m = INT_MAX; 
    for (int i = 0; i < 2 * n - 1; ++i) { 
        if (arr[i] < 0) { 
            ++negtiveCnt; 
        } 
        sum = sum + abs(arr[i]); 
        m = min(m, abs(arr[i])); 
    } 
    if (negtiveCnt % 2 && n % 2 == 0) { 
        sum = sum - 2 * m; 
        return sum; 
    } 
    return sum; 
} 
int main() { 
    int arr[] = {-2, 100, -3}; 
    int n = 2; 
    cout << "Maximum sum = " << getMaxSum(arr, n) << endl; 
    return 0; 
}

আউটপুট

Maximum sum = 105
  1. নির্দিষ্ট যোগফল দিয়ে সব পেয়ার প্রিন্ট করা C++-তে

  2. C++ STL-এ অ্যারে যোগফল (Array Sum)

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

  4. C++ সম অ্যারে পাজল (Sum Array Puzzle)