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

সি++ কোড: কার্ড ফেলে ন্যূনতম যোগফল বের করুন

৫টি সংখ্যা একটি অ্যারে T-তে আছে। ৫টি কার্ড আছে, i-তম কার্ডে T[i] লিখা আছে। আমরা কিছু কার্ড ফেলতে পারি যাতে বাকি কার্ডগুলোর সংখ্যার যোগফল ন্যূনতম হয়। আমরা সবচেয়ে একবার দুটি বা তিনটি একই সংখ্যावালা কার্ড ফেলতে পারি। যদি দুটি বা তিনটি একই সংখ্যাবালা কার্ড বেছে নেওয়া না যায়, তবে কার্ড ফেলব না। ন্যূনতম সম্ভাব্য যোগফল বের করতে হবে।

উদাহরণ

T = [7, 3, 7, 3, 20] → আউটপুট: 26
ব্যাখ্যা: ৭ দিয়ে দুটি কার্ড ফেললে বাকি যোগফল = 3+3+20 = 26।

সমাধানের ধাপসমূহ

n := 5
m := 0
k[101] := {0}
for i := 0 to 4:
    a := T[i]
    m += a
    k[a]++
M := m
for i := 0 to 100:
    if k[i] > 1:
        M := min(M, m - i * min(3, k[i]))
return M

সি++ কোড উদাহরণ

#include <bits/stdc++.h>
using namespace std;

int solve(vector<int> T) {
    int n = 5, m = 0;
    int k[101] = {0};
    for (int i = 0; i < n; i++) {
        int a = T[i];
        m += a;
        k[a]++;
    }
    int M = m;
    for (int i = 0; i < 101; i++)
        if (k[i] > 1)
            M = min(M, m - i * min(3, k[i]));
    return M;
}

int main() {
    vector<int> T = {7, 3, 7, 3, 20};
    cout << solve(T) << endl;
}

ইনপুট

{ 7, 3, 7, 3, 20 }

আউটপুট

26
  1. C++-এ প্রাইম P-এর পরের প্রাইম নম্বর जिनका যোগফল S

  2. C++-এ ম্যাট্রিক্সে মিনিমাম পাথ সম (Minimum Path Sum)

  3. C++-এ একটি সংখ্যাকে বারবার ডিভাইজার দিয়ে ভাগ করে ম্যাক্সিমাম সাম

  4. ত্রিভুজে ন্যূনতম সম পথ বের করা (C++)