কম্পিউটার

অঙ্কের অ্যারে থেকে 3 এর বৃহত্তম গুণিতক খুঁজুন - C++ এ 2 সেট করুন


ধরুন আমাদের কাছে বিভিন্ন অঙ্কের অ্যারে আছে; আমাদেরকে 3-এর সবচেয়ে বড় মাল্টিপল খুঁজে বের করতে হবে যেটি যে কোনো ক্রমে সেই অ্যারেতে প্রদত্ত কিছু সংখ্যাকে একত্রিত করে তৈরি করা যেতে পারে। উত্তরটি খুব বড় হতে পারে তাই এটি স্ট্রিং হিসাবে তৈরি করুন। কোন উত্তর না থাকলে একটি খালি স্ট্রিং ফেরত দিন।

সুতরাং, যদি ইনপুট [7,2,8] এর মত হয়, তাহলে আউটপুট হবে 87।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি 2D অ্যারে ডি সংজ্ঞায়িত করুন, তিনটি সারি থাকবে

  • অ্যারের সংখ্যাগুলি সাজান

  • যোগফল :=0

  • আরম্ভ করার জন্য i :=0, যখন i <সংখ্যার আকার, আপডেট (i 1 দ্বারা বৃদ্ধি), −

    • x :=সংখ্যা[i]

    • d[x mod 3]

      -এর শেষে অঙ্ক [i] সন্নিবেশ করান
    • যোগফল :=যোগফল + x

    • যোগফল :=সমষ্টি মোড 3

  • যদি যোগফল অ-শূন্য হয়, তাহলে −

    • যদি d[sum] এর আকার না হয়, তাহলে −

      • rem :=3 - যোগফল

      • যদি d[rem] <2 এর আকার হয়, তাহলে −

        • খালি স্ট্রিং ফেরত দিন

      • d[rem] থেকে দুবার শেষ উপাদান মুছুন

    • অন্যথায়

      • d[sum]

        থেকে শেষ উপাদান মুছুন
  • ret :=খালি স্ট্রিং

  • আরম্ভ করার জন্য i :=0, যখন i <3, আপডেট করুন (i 1 দ্বারা বাড়ান), −

    • j শুরু করার জন্য :=0, যখন j করুন

      • ret :=ret concatenate d[i, j] স্ট্রিং হিসাবে

  • অ্যারে ret সাজান

  • যদি ret এবং ret[0] এর আকার '0' এর মতো হয়, তাহলে −

    • "0"

      ফেরত দিন
  • রিটার্ন রিটার্ন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   string largestMultipleOfThree(vector<int>& digits) {
      vector<vector<int>> d(3);
      sort(digits.begin(), digits.end(), greater<int>());
      int sum = 0;
      for (int i = 0; i < digits.size(); i++) {
         int x = digits[i];
         d[x % 3].push_back(digits[i]);
         sum += x;
         sum %= 3;
      }
      if (sum) {
         if (!d[sum].size()) {
            int rem = 3 - sum;
            if (d[rem].size() < 2)
               return "";
            d[rem].pop_back();
            d[rem].pop_back();
         }
         else {
            d[sum].pop_back();
         }
      }
      string ret = "";
      for (int i = 0; i < 3; i++) {
         for (int j = 0; j < d[i].size(); j++) {
            ret += to_string(d[i][j]);
         }
      }
      sort(ret.begin(), ret.end(), greater<int>());
      if (ret.size() && ret[0] == '0')
         return "0";
      return ret;
   }
};
main(){
   Solution ob;
   vector<int> v = {7,2,8};
   cout << (ob.largestMultipleOfThree(v));
}

ইনপুট

{7,2,8}

আউটপুট

87

  1. C++ এ একটি গাছের মধ্যে সবচেয়ে বড় সাবট্রি সমষ্টি খুঁজুন

  2. C++ এ বিভক্ত অ্যারে বৃহত্তম যোগফল

  3. C++ এ একটি অ্যারের অঙ্ক থেকে গঠিত দুটি সংখ্যার ন্যূনতম যোগফল

  4. C++ এ STL ব্যবহার করে একটি অ্যারের উপাদানের যোগফল কিভাবে খুঁজে পাওয়া যায়?