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

সি++ প্রোগ্রাম: যেকোনো বীজগাণিতিক অভিব্যক্তির ন্যূনতম মান (Minimum Value) বের করা


এটি যেকোনো বীজগাণিতিক অভিব্যক্তির ন্যূনতম মান বের করার একটি সি++ প্রোগ্রাম। (x1 + x2 + x3 + ... + xa) * (y1 + y2 + ... + yb) আকারের একটি বীজগাণিতিক অভিব্যক্তি এবং (a + b) পূর্ণসংখ্যা দেওয়া আছে। a সংখ্যা এবং বাকি b সংখ্যার সব সম্ভাব্য কোম্বিনেশন বিবেচনা করে তাদের মান হিসাব করা হয়, যার থেকে ন্যূনতম মান বের করা হয়।

আলগরিদম

Begin
    function MaxValue() :
    Arguments:
    a[] = যেই অ্যারেতে এলিমেন্টগুলো স্টোর করা আছে।
    x,y = পূর্ণসংখ্যা।
    Body of the function:
    1) অ্যারে এলিমেন্টগুলোর যোগফল বের করুন।
    2) s = 0 ইনিশিয়ালাইজ করুন।
    3) for loop i = 0 to (x + y) - 1 পূর্ণসংখ্যাগুলো ২৫ দিয়ে শিফট করুন যাতে তারা পজিটিভ হয়।
    4) একটি বুলিয়ান অ্যারে p[i][j] ডিক্লেয়ার করুন যা ট্রু রিপ্রেজেন্ট করে যদি i সংখ্যা চুনে যোগফল j পাওয়া যায়।
    5) অ্যারে ইনিশিয়ালাইজেশন।
    6) for loop i = 0 to (x + y) - 1 নির্ধারণ করুন যদি p[i][j] ট্রু হয়, মানে (x + y) সংখ্যা থেকে i সংখ্যা বেছে নিয়ে যোগফল j পাওয়া যায়।
    7) min_value = INF ইনিশিয়ালাইজ করুন।
    8) for loop i = 0 to (MAX * MAX + 1) - 1 চেক করুন একটি নির্দিষ্ট যোগফল x সংখ্যা বেছে নিয়ে পাওয়া যায় কিনা।
        if (p[x][i])
            আসল যোগফল বের করুন যেহেতু আমরা সংখ্যাগুলো ২৫ দিয়ে শিফট করেছি নেগেটিভ ইন্ডেক্সিং এড়াতে।
    9) min_value প্রিন্ট করুন।
End

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
#define INF 1e9
#define MAX 25

int MinValue(int a[], int x, int y) {
    int s = 0;
    for (int i = 0; i < (x + y); i++) {
        s += a[i];
        a[i] += 25;
    }
    bool p[MAX+1][MAX * MAX + 1];
    memset(p, 0, sizeof(p));
    p[0][0] = 1;
    for (int i = 0; i < (x + y); i++) {
        for (int k = min(x, i + 1); k >= 1; k--) {
            for (int j = 0; j < MAX * MAX + 1; j++) {
                if (p[k - 1][j])
                    p[k][j + a[i]] = 1;
            }
        }
    }
    int min_value = INF;
    for (int i = 0; i < MAX * MAX + 1; i++) {
        if (p[x][i]) {
            int tmp = i - 25 * x;
            min_value = min(min_value, tmp * (s - tmp));
        }
    }
    cout << "Minimum Value: " << min_value;
}

int main() {
    int x = 2, y = 2;
    int ar[] = { 7, 6, 4, 3 };
    MinValue(ar, x, y);
    return 0;
}

আউটপুট

Minimum Value: 91
  1. C++-এ কার্টেসিয়ান কোঅর্ডিনেট পয়েন্টগুলোর মিনিমাম কানেকশন খরচ বের করার প্রোগ্রাম

  2. সি++-এ kটি সাবলিস্টে ভাগ করে সর্বনিম্ন সর্বাধিক যোগফল খুঁজে বের করার প্রোগ্রাম

  3. যোগাযোগ টাওয়ার গ্রুপ গণনা C++-এ

  4. C++-এ বাইনারি ট্রি-র ন্যূনতম সম আয়ত্ত লেভেল বের করার প্রোগ্রাম