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

C++-এ দেওয়া এক্সপ্রেশনের মান সর্বাধিক করা

সমস্যা বিবরণ

তিনটি নন-জিরো ইন্টিজার a, b এবং c দেওয়া আছে। কাজ হল যোগ এবং গুণ চিহ্ন ব্যবহার করে যেকোনো ক্রমে তাদের মাঝপথে রাখা যাতে সর্বোচ্চ মান পাওয়া যায়।

দ্রষ্টব্য: ইন্টিজারগুলো পুনর্বিন্যাস করা যাবে কিন্তু যোগ এবং গুণ চিহ্ন একবার씩 ব্যবহার করতে হবে।

যদি a = 1, b = 3 এবং c = 5 হয় তবে সর্বোচ্চ মান হবে ২০ নিচের মতো:

(1 + 3) * 5 = 20

অ্যালগরিদম

1. যদি সব সংখ্যা পজিটিভ হয়, তবে দুটি ছোট সংখ্যা যোগ করুন এবং ফলাফল বড় সংখ্যার সাথে গুণ করুন। 
2. যদি শুধু দুটি সংখ্যা পজিটিভ হয়, তবে দুটি পজিটিভ সংখ্যা গুণ করুন এবং বাকি সংখ্যা যোগ করুন। 
3. যদি শুধু একটি সংখ্যা পজিটিভ হয়, তবে দুটি নেগেটিভ সংখ্যা গুণ করুন এবং বাকি সংখ্যা যোগ করুন। 
4. যদি সব সংখ্যা নেগেটিভ হয়, তবে দুটি সবচেয়ে বড় ইন্টিজার যোগ করুন এবং ফলাফল বাকি সংখ্যার সাথে গুণ করুন।

উদাহরণ

#include <bits/stdc++.h> 
using namespace std; 
int getMaximumResult(int a, int b, int c) { 
    int negativeCnt = 0; 
    int sum = a + b + c; 
    int mul = a * b * c; 
    int largest = max(a, max(b, c)); 
    int smallest = min(a, min(b, c)); 
    if (a < 0) ++negativeCnt; 
    if (b < 0) ++negativeCnt; 
    if (c < 0) ++negativeCnt; 
    if (negativeCnt == 0) { 
        return (sum - largest) * largest; 
    } else if (negativeCnt == 1) { 
        return (mul / smallest) + smallest; 
    } else if (negativeCnt == 2) { 
        return (mul / largest) + largest; 
    } else if (negativeCnt == 3) { 
        return (sum - smallest) * smallest; 
    } 
} 
int main() { 
    int a = 1, b = 3, c = 5; 
    cout << "Maximum value = " << getMaximumResult(a, b, c) << endl; 
    return 0; 
}

আউটপুট

Maximum value = 20
  1. C++-এ গ্রিডের মধ্যে নির্দিষ্ট দিকচালনের সম্ভাব্য মোভ সংখ্যা গণনা

  2. C++-এ প্যারেনথেসিস ছাড়া এক্সপ্রেশনের সকল সম্ভাব্য ফলাফল খুঁজে বের করা

  3. সি++ প্রোগ্রাম: সর্টেড অ্যারেতে দেওয়া মান থেকে kটি নিকটতম উপাদান খুঁজে বের করা

  4. দেওয়া পার্থক্যের সাথে একটি জোড়া খুঁজে বের করা C++-এ