কম্পিউটার

C++ এ প্রদত্ত সংখ্যার জন্য সবচেয়ে বড় সময়


ধরুন আমাদের কাছে 4 ডিজিটের একটি অ্যারে আছে, আমাদেরকে সবচেয়ে বড় 24-ঘন্টা সময় বের করতে হবে যা তৈরি করা যেতে পারে। আমরা জানি যে 24-ঘন্টার ক্ষুদ্রতম সময় হল 00:00, এবং বৃহত্তম সময় হল 23:59৷ 00:00 থেকে শুরু করে, মধ্যরাত থেকে আরও বেশি সময় অতিবাহিত হলে একটি সময় বড় হয়৷ আমাদের উত্তরটি 5 দৈর্ঘ্যের স্ট্রিং হিসাবে ফেরত দিতে হবে। যদি ফেরত দেওয়ার কোন বৈধ সময় না থাকে, তাহলে একটি খালি স্ট্রিং ফেরত দিন।

সুতরাং, যদি ইনপুটটি [1,2,3,4] এর মত হয়, তাহলে আউটপুট হবে "23:41"

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

  • একটি ফাংশন isValid() সংজ্ঞায়িত করুন, এটি একটি স্ট্রিং নেবে,
  • যদি a[0]> '2' হয়, তাহলে −
    • মিথ্যে ফেরত দিন
  • যদি a[0] '2' এবং a[1]> '3' হয়, তাহলে −
    • মিথ্যে ফেরত দিন
  • যদি a[3]> '5' হয়, তাহলে −
    • মিথ্যে ফেরত দিন
  • সত্যে ফিরে আসুন
  • একটি ফাংশন সংজ্ঞায়িত করুন dfs(), এটি একটি অ্যারে A, res, cur,
  • যদি cur এর আকার 5 এর সমান হয়, তাহলে −
    • যদি Valid(cur) এবং cur> res হয়, তাহলে −
      • res :=cur
    • প্রত্যাবর্তন
  • আরম্ভ করার জন্য i :=0, যখন i <4, আপডেট করুন (i 1 দ্বারা বৃদ্ধি করুন), −
      করুন
    • যদি A[i] -1 এর সমান না হয়, তাহলে −
      • tmp :=A[i]
      • cur :=cur + A[i] + ASCII of '0'
      • যদি cur এর আকার 2 এর সমান হয়, তাহলে −
        • cur :=cur concatenate with ':'
      • A[i] :=-1
      • dfs(A, res, cur)
      • A[i] :=tmp
      • cur থেকে শেষ উপাদান মুছুন
      • যদি cur এর আকার 2 এর সমান হয়, তাহলে −
        • cur থেকে শেষ উপাদান মুছুন
  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
  • res :=খালি স্ট্রিং, tmp :=খালি স্ট্রিং
  • dfs(A, res, tmp)
  • রিটার্ন রিটার্ন

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

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   void dfs(vector<int>& A, string& res, string& cur) {
      if (cur.size() == 5) {
         if (isValid(cur) && cur > res)
            res = cur;
            return;
         }
         for (int i = 0; i < 4; ++i) {
            if (A[i] != -1) {
               int tmp = A[i];
               cur += A[i] + '0';
            if (cur.size() == 2)
               cur += ':';
               A[i] = -1;
               dfs(A, res, cur);
               A[i] = tmp;
               cur.pop_back();
               if (cur.size() == 2)
                  cur.pop_back();
            }
         }
   }
   bool isValid(const string a) {
      if (a[0] > '2')
         return false;
         if (a[0] == '2' && a[1] > '3')
            return false;
         if (a[3] > '5')
            return false;
         return true;
   }
   string largestTimeFromDigits(vector<int>& A) {
      string res = "", tmp = "";
      dfs(A, res, tmp);
      return res;
   }
};
main(){
Solution ob;
vector<int> v = {1,2,3,4};
cout << (ob.largestTimeFromDigits(v));
}

ইনপুট

{1,2,3,4}

আউটপুট

23:41

  1. অগ্রাধিকার নির্ধারণের জন্য C++ প্রোগ্রাম

  2. C++ এ প্রদত্ত সংখ্যাগুলি দিয়ে তৈরি করা যেতে পারে এমন বৃহত্তম সংখ্যাটি খুঁজুন

  3. X দ্বারা বিভাজ্য বৃহত্তম K সংখ্যার সংখ্যার জন্য C++ প্রোগ্রাম?

  4. একটি প্রদত্ত সংখ্যার সংখ্যা যোগ করার জন্য C++ প্রোগ্রাম