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

C++ में तिजोरी को क्रैक करना

मान लीजिए हमारे पास एक बॉक्स है जो पासवर्ड से सुरक्षित है। पासवर्ड n अंकों का एक क्रम है जहां प्रत्येक अंक पहले k अंक 0, 1, ..., k-1 में से एक हो सकता है। इसलिए, जब हम कोई पासवर्ड डाल रहे होते हैं, तो दर्ज किए गए अंतिम n अंक स्वचालित रूप से सही पासवर्ड से मेल खाते हैं।

इसलिए उदाहरण के लिए, सही पासवर्ड "563" मानते हुए, यदि हम "285639" डालते हैं, तो बॉक्स खुल जाएगा क्योंकि सही पासवर्ड दर्ज किए गए पासवर्ड के प्रत्यय से मेल खाता है। हमें न्यूनतम लंबाई का कोई भी पासवर्ड खोजना होगा जो इसे दर्ज करने के किसी बिंदु पर बॉक्स को खोलने की गारंटी है।

जब इनपुट n =2 और k =2 जैसा हो, तो परिणाम "01100", "00110", "10011", "11001", इनमें से कोई भी हो सकता है।

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

  • विज़िट नामक एक सेट को परिभाषित करें
  • एक फ़ंक्शन dfs() परिभाषित करें, इसमें s, k,
  • लगेगा
  • इनिशियलाइज़ i :=0 के लिए, जब i करें
  • अस्थायी:=s मैं स्ट्रिंग के रूप में संयोजित करता हूं
  • अगर टेम्परेचर नहीं आया है, तो −
    • भेजे गए में अस्थायी डालें
    • अस्थायी:=सूचकांक 1 से अंत तक अस्थायी की सबस्ट्रिंग प्राप्त करें
    • dfs(temp, k)
    • ret :=ret concatenate i as string
  • मुख्य विधि से, निम्न कार्य करें -
  • यदि n 1 के समान है और k 1 के समान है, तो −
    • वापसी "0"
  • ret:=खाली स्ट्रिंग, s:=खाली स्ट्रिंग
  • इनिशियलाइज़ i :=0 के लिए, जब i करें
  • s :=s "0" को जोड़ना
  • dfs(s, k)
  • इनिशियलाइज़ i :=0 के लिए, जब i करें
  • ret :=ret concatenate "0"
  • रिटर्न रिटर्न
  • आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       set <string> visited;
       string ret;
       string crackSafe(int n, int k) {
          if(n == 1 && k == 1) return "0";
          ret = "";
          string s = "";
          for(int i = 0; i < n - 1; i++){
             s += "0";
          }
          dfs(s, k);
          for(int i = 0; i < n - 1; i++) ret += "0";
          return ret;
       }
       void dfs(string s, int k) {
          string temp;
          for(int i = 0; i < k; i++){
             temp = s + to_string(i);
             if(!visited.count(temp)){
                visited.insert(temp);
                temp = temp.substr(1);
                dfs(temp, k);
                ret += to_string(i);
             }
          }
       }
    };
    main(){
       Solution ob;
       cout << (ob.crackSafe(2,2));
    }

    इनपुट

    2
    2

    आउटपुट

    01100

    1. C++ . में भूलभुलैया II

      मान लीजिए कि एक भूलभुलैया में खाली जगह और दीवारों के साथ एक गेंद है। अब गेंद ऊपर, नीचे, बाएँ या दाएँ किसी भी दिशा में लुढ़क कर खाली रास्तों से जा सकती है, लेकिन दीवार से टकराने तक यह लुढ़कना बंद नहीं करेगी। जब गेंद रुकती है, तो वह अगली दिशा चुन सकती है। हमें गेंद, गंतव्य और भूलभुलैया की स्थिति शुरू

    1. सी ++ में भूलभुलैया

      मान लीजिए कि एक भूलभुलैया में खाली जगह और दीवारों के साथ एक गेंद है। अब गेंद ऊपर, नीचे, बाएँ या दाएँ किसी भी दिशा में लुढ़क कर खाली रास्तों से जा सकती है, लेकिन दीवार से टकराने तक यह लुढ़कना बंद नहीं करेगी। जब गेंद रुकती है, तो वह अगली दिशा चुन सकती है। हमें गेंद की स्थिति, गंतव्य और भूलभुलैया शुरू

    1. C++ . में भूलभुलैया III

      मान लीजिए कि खाली जगह और दीवारों के साथ एक भूलभुलैया है और उस भूलभुलैया में एक गेंद भी है। गेंद ऊपर (यू), नीचे (डी), बाएं (एल) या दाएं (आर) दिशाओं को लुढ़क कर खाली जगहों से जा सकती है, लेकिन यह दीवार से टकराने तक लुढ़कती रहती है। जब गेंद रुकती है, तो वह अगली दिशा चुन सकती है। उस भूलभुलैया में एक छेद