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

C++-এ তিনটি স্ট্যাকের সমান সর্বোচ্চ যোগফল বের করুন

ধরুন ধনাত্মক সংখ্যার তিনটি স্ট্যাক আছে। প্রতিটি স্ট্যাকের উপরের উপাদানগুলো সরিয়ে তিনটি স্ট্যাকের যোগফল সমান করার চেষ্টা করनी होगी। স্ট্যাকগুলো অ্যারে আকারে দেওয়া থাকবে, যেখানে প্রথম ইনডেক্সটি স্ট্যাকের টপ উপাদান। উদাহরণস্বরূপ, স্ট্যাকগুলো [3, 10], [4, 5] এবং [2, 1] হলে আউটপুট হবে ০, কারণ সব উপাদান সরিয়ে ফেললেই যোগফল সমান হয়।

সমাধানের পদ্ধতি
  • প্রতিটি স্ট্যাকের সব উপাদানের যোগফল বের করুন।
  • যদি তিনটি স্ট্যাকের যোগফল সমান হয়, তবে সেটিই সর্বোচ্চ যোগফল।
  • অন্যথায়, যেটির যোগফল সর্বাধিক, সেটির টপ উপাদানটি সরিয়ে ফেলুন। ধাপ ১ এবং ২ পুনরাবৃত্তি করুন।
উদাহরণ কোড
#include <iostream>
#include <algorithm>
using namespace std;

int maxStackSum(int stk1[], int stk2[], int stk3[], int size1, int size2, int size3) {
    int add1 = 0, add2 = 0, add3 = 0;
    for (int i = 0; i < size1; i++) add1 += stk1[i];
    for (int i = 0; i < size2; i++) add2 += stk2[i];
    for (int i = 0; i < size3; i++) add3 += stk3[i];

    int top1 = 0, top2 = 0, top3 = 0;
    int ans = 0;
    while (true) {
        if (top1 == size1 || top2 == size2 || top3 == size3) return 0;
        if (add1 == add2 && add2 == add3) return add1;
        if (add1 >= add2 && add1 >= add3) add1 -= stk1[top1++];
        else if (add2 >= add3 && add2 >= add1) add2 -= stk2[top2++];
        else if (add3 >= add2 && add3 >= add1) add3 -= stk3[top3++];
    }
}

int main() {
    int stack1[] = {3, 2, 1, 1, 1};
    int stack2[] = {4, 3, 2};
    int stack3[] = {1, 1, 4, 1};
    int size1 = sizeof(stack1)/sizeof(stack1[0]);
    int size2 = sizeof(stack2)/sizeof(stack2[0]);
    int size3 = sizeof(stack3)/sizeof(stack3[0]);
    cout << "The maximum sum is: " << maxStackSum(stack1, stack2, stack3, size1, size2, size3);
}
আউটপুট
The maximum sum is: 5
  1. সকল সাবসিকোয়েন্সের যোগফলের যোগফল (C++)

  2. স্ট্রিক্টলি ইনক্রিজিং সাব-অ্যারের সর্বোচ্চ যোগফল বের করা C++-তে

  3. বাইনারি ট্রিতে ভার্টিকাল সমের সর্বোচ্চ মান খুঁজে বের করা C++-তে

  4. C++ ব্যবহার করে ম্যাট্রিক্সে সর্বোচ্চ যোগফল করা কলাম বের করা