কম্পিউটার

C++ এ পরবর্তী নিকটতম সময়


ধরুন আমরা "HH:MM" ফরম্যাটে একটি সময় উপস্থাপন করেছি, আমাদের বর্তমান সংখ্যাগুলি পুনরায় ব্যবহার করে পরবর্তী নিকটতম সময় তৈরি করতে হবে। আমরা সংখ্যাটি সীমাহীন সংখ্যক বার ব্যবহার করতে পারি।

সুতরাং, যদি ইনপুটটি "19:34" এর মত হয়, তাহলে আউটপুট হবে "19:39" হিসাবে পরবর্তী নিকটতম সময় 1, 9, 3, 4, 19:39 থেকে বেছে নেওয়ার সময়। এটি 19:33 নয়, কারণ এটি 23 ঘন্টা এবং 59 মিনিট পরে ঘটে৷

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

  • একটি ফাংশন সংজ্ঞায়িত করুন eval(), এটি x,

    লাগবে
  • a :=x[0] কে স্ট্রিং এ রূপান্তর করুন

  • a :=a + x[1]

  • b :=x[2] কে স্ট্রিং এ রূপান্তর করুন

  • b :=b + x[3]

  • একটি পূর্ণসংখ্যা হিসাবে ফেরত দিন * 60 + b পূর্ণসংখ্যা হিসাবে

  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -

  • ret :=ফাঁকা স্ট্রিং

  • temp :=ফাঁকা স্ট্রিং

  • diff :=inf

  • একটি অ্যারে সময় সংজ্ঞায়িত করুন

  • সময় শেষে t[0] ঢোকান

  • সময় শেষে t[1] ঢোকান

  • সময় শেষে t[3] ঢোকান

  • সময় শেষে t[4] ঢোকান

  • n :=সময়ের আকার

  • src :=ফাঁকা স্ট্রিং

  • temp1 :=ফাঁকা স্ট্রিং

  • temp2 :=ফাঁকা স্ট্রিং

  • আরম্ভ করার জন্য i :=0, যখন i

    • src :=src + সময়[i]

  • আরম্ভ করার জন্য i :=0, যখন i

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

      • আরম্ভ করার জন্য k :=0, যখন k

        • আরম্ভ করার জন্য l :=0, যখন l করুন

        • temp1 :=সময়[i]

        • temp1 :=temp1 + সময়[j]

        • temp2 :=সময়[k]

        • temp2 :=temp2 + সময়[l]

        • যদি temp1 সংখ্যা হিসাবে> 23 বা temp2 সংখ্যা হিসাবে> 59, তাহলে −

          • নিম্নলিখিত অংশ উপেক্ষা করুন, পরবর্তী পুনরাবৃত্তি এড়িয়ে যান

        • temp :=temp1 + temp2

        • যদি temp src এর মত হয়, তাহলে −

          • নিম্নলিখিত অংশ উপেক্ষা করুন, পরবর্তী পুনরাবৃত্তি এড়িয়ে যান

        • newDiff :=eval(temp - eval(src))

        • যদি newDiff <0, তাহলে −

          • newDiff :=newDiff + (60 * 24)

        • যদি newDiff

          • diff :=newDiff

          • ret :=temp1 + ":" + temp2

  • রিটার্ন (যদি ret এর আকার 0 এর মতো হয়, তাহলে t, অন্যথায় ret)

উদাহরণ

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int eval(string x){
      string a = to_string(x[0]);
      a += x[1];
      string b = to_string(x[2]);
      b += x[3];
      return stoi(a) * 60 + stoi(b);
   }
   string nextClosestTime(string t) {
      string ret = "";
      string temp = "";
      int diff = INT_MAX;
      vector<char> time;
      time.push_back(t[0]);
      time.push_back(t[1]);
      time.push_back(t[3]);
      time.push_back(t[4]);
      int n = time.size();
      string src = "";
      string temp1 = "";
      string temp2 = "";
      for (int i = 0; i < n; i++)
         src += time[i];
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < n; j++) {
            for (int k = 0; k < n; k++) {
               for (int l = 0; l < n; l++) {
                  temp1 = time[i];
                  temp1 += time[j];
                  temp2 = time[k];
                  temp2 += time[l];
                  if (stoi(temp1) > 23 || stoi(temp2) > 59)
                     continue;
                  temp = temp1 + temp2;
                  if (temp == src)
                     continue;
                  int newDiff = eval(temp) - eval(src);
                  if (newDiff < 0)
                     newDiff += (60 * 24);
                  if (newDiff < diff) {
                     diff = newDiff;
                     ret = temp1 + ":" + temp2;
                  }
               }
            }
         }
      }
      return ret.size() == 0 ? t : ret;
   }
};
main(){
   Solution ob;
   cout<<(ob.nextClosestTime("19:34"));
}

ইনপুট

"19:34"

আউটপুট

19:39

  1. C++ এ স্ট্রিং ডিকোড করুন

  2. C++ এ () এ স্ট্রিং

  3. C++ এ একটি স্ট্রিং টোকেনাইজ করা

  4. C++ এ একটি স্ট্রিংকে টোকেনাইজ করবেন?