Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी++ में अगला निकटतम समय

मान लीजिए कि हमारे पास "एचएच:एमएम" प्रारूप में प्रतिनिधित्व किया गया समय है, तो हमें वर्तमान अंकों का पुन:उपयोग करके अगला निकटतम समय उत्पन्न करना होगा। हम अंकों का असीमित बार उपयोग कर सकते हैं।

इसलिए, यदि इनपुट "19:34" जैसा है, तो आउटपुट "19:39" होगा, क्योंकि अंक 1, 9, 3, 4 में से चुनने का अगला निकटतम समय 19:39 है। यह 19:33 नहीं है, क्योंकि यह 23 घंटे 59 मिनट बाद होता है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • फ़ंक्शन को परिभाषित करें eval(), इसमें x लगेगा,

  • a:=x[0] को स्ट्रिंग में बदलें

  • ए:=ए + एक्स[1]

  • b :=x[2] को स्ट्रिंग में बदलें

  • बी:=बी + एक्स[3]

  • a को पूर्णांक के रूप में लौटाएं * 60 + b पूर्णांक के रूप में

  • मुख्य विधि से निम्न कार्य करें -

  • रिट:=खाली स्ट्रिंग

  • अस्थायी:=रिक्त स्ट्रिंग

  • अंतर :=inf

  • सरणी समय निर्धारित करें

  • समय के अंत में t[0] डालें

  • समय के अंत में t[1] डालें

  • समय के अंत में t[3] डालें

  • समय के अंत में t[4] डालें

  • n :=समय का आकार

  • src :=रिक्त स्ट्रिंग

  • temp1:=खाली स्ट्रिंग

  • temp2 :=रिक्त स्ट्रिंग

  • इनिशियलाइज़ i :=0 के लिए, जब i

    • src :=src + time[i]

  • इनिशियलाइज़ i :=0 के लिए, जब i

    • इनिशियलाइज़ j :=0 के लिए, जब j

      • इनिशियलाइज़ k :=0 के लिए, जब k

        • इनिशियलाइज़ l :=0 के लिए, जब l करें

        • temp1:=समय[i]

        • temp1 :=temp1 + time[j]

        • अस्थायी 2:=समय [के]

        • temp2 :=temp2 + time[l]

        • यदि संख्या के रूप में temp1> 23 या temp2 संख्या> 59 के रूप में, तो -

          • निम्नलिखित भाग पर ध्यान न दें, अगले पुनरावृत्ति पर जाएं

        • अस्थायी:=temp1 + temp2

        • यदि अस्थायी स्रोत के समान है, तो -

          • निम्नलिखित भाग पर ध्यान न दें, अगले पुनरावृत्ति पर जाएं

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

        • अगर न्यूडिफ <0, तो -

          • newDiff :=newDiff + (60 * 24)

        • अगर newDiff

          • अंतर :=नयाडिफ

          • रिट:=temp1 + ":" + temp2

  • वापसी (यदि रिट का आकार 0 के समान है, तो टी, अन्यथा रिट)

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#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++ स्ट्रिंग क्लास at() . का एक सिंहावलोकन है स्ट्रिंग से वर्णों के अनुक्रम तक पहुँचने के लिए कार्यक्षमता। आगामी खंड में, एक इच्छुक पाठक स्ट्रिंग क्लास प्रोग्रामिंग उदाहरणों के माध्यम से at() के हेरफेर की पूरी समझ प्राप्त कर सकता है। कार्य। स्ट्रिंग क्लास प्रोग्रामिंग श

  1. सी ++ में एक स्ट्रिंग को टोकन करना

    इस खंड में, हम देखेंगे कि C++ में स्ट्रिंग्स को कैसे टोकननाइज़ किया जाता है। सी में हम वर्ण सरणी के लिए strtok() फ़ंक्शन का उपयोग कर सकते हैं। यहां हमारे पास एक स्ट्रिंग क्लास है। अब हम देखेंगे कि उस स्ट्रिंग से कुछ सीमांकक का उपयोग करके स्ट्रिंग को कैसे काटा जाता है। C++ फीचर का उपयोग करने के लिए,

  1. सी ++ में एक स्ट्रिंग को टोकननाइज़ करें?

    पहला तरीका है, रिक्त स्थान से अलग किए गए शब्दों को पढ़ने के लिए एक स्ट्रिंगस्ट्रीम का उपयोग करना। यह थोड़ा सीमित है लेकिन यदि आप उचित जांच प्रदान करते हैं तो यह कार्य काफी अच्छी तरह से करता है। उदाहरण #include <vector> #include <string> #include <sstream> using namespace std; in