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

सी ++ में बहाली के बाद सभी संभावित आईपी पते को खोजने का कार्यक्रम

मान लीजिए कि हमारे पास केवल अंकों के साथ एक स्ट्रिंग है, हमें सभी संभावित मान्य आईपी एड्रेस संयोजन बनाकर इसे पुनर्स्थापित करना होगा। हम जानते हैं कि एक वैध आईपी पते में ठीक चार पूर्णांक होते हैं (प्रत्येक पूर्णांक 0 से 255 की सीमा में होता है) एकल अवधि के प्रतीक द्वारा अलग किया जाता है।

इसलिए, यदि इनपुट ip ="25525511136" जैसा है, तो आउटपुट ["254.25.40.123", "254.254.0.123"]

होगा।

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

  • एक फ़ंक्शन को परिभाषित करें ConvertToNum(), इसमें s, start, end, होगा,
  • संख्या:=0
  • इनिशियलाइज़ करने के लिए i :=start, जब i <=end, अपडेट करें (i को 1 से बढ़ाएँ), −
      करें
    • संख्या:=(संख्या * 10) + (एस[i] - '0' का ASCII)
    • यदि संख्या> 255 है, तो −
      • 10000 वापस करें
  • वापसी संख्या
  • एक फ़ंक्शन को परिभाषित करें addDots(), यह स्थिति लेगा,
  • res:=रिक्त स्ट्रिंग
  • x :=0, posIndex :=0
  • इनिशियलाइज़ i :=0 के लिए, जब i <पोजीशन का आकार, अपडेट (i 1 से बढ़ाएँ), करें -
    • संख्या:=स्थिति[i]
    • एक स्ट्रिंग str1 बनाएं
    • अस्थायी:=स्ट्रिंग के रूप में संख्या
    • res :=res + temp
    • यदि मैं <पदों का आकार, तो −
      • res :=res concatenate "."
  • रिटर्न रेस
  • एक फ़ंक्शन को परिभाषित करें हल करें (), यह s, एक स्ट्रिंग सरणी परिणाम, एक सरणी स्थिति, dotCount लेगा, यह इसे 3 के साथ प्रारंभ करता है, startIndex, यह इसे 0 से प्रारंभ करता है,
  • यदि नहीं है तो डॉटकाउंट गैर-शून्य है और ((एस -1 का आकार - startIndex + 1) 1, फिर −
    • अस्थायी:=ConvertToNum(s, startIndex, size of s)
    • यदि अस्थायी>=0 और अस्थायी <=255, तो −
      • स्थिति के अंत में अस्थायी डालें
      • res :=addDots(positions)
      • यदि रेस का आकार s के आकार के समान है, तो −
        • परिणाम के अंत में रेस डालें
    • वापसी
  • इनिशियलाइज़ i :=startIndex के लिए, जब i
  • अस्थायी:=ConvertToNum(s, startIndex, i)
  • यदि अस्थायी>=0 और अस्थायी <=255, तो −
    • स्थिति के अंत में अस्थायी डालें
    • समाधान(s, परिणाम, स्थिति, dotCount - 1, i + 1)
    • स्थितियों से अंतिम तत्व हटाएं
  • एक फ़ंक्शन को परिभाषित करें genIp यह एक स्ट्रिंग लेगा s
  • सरणी परिणाम परिभाषित करें
  • सरणी स्थिति परिभाषित करें
  • समाधान (ओं, परिणाम, स्थिति)
  • वापसी का परिणाम
  • मुख्य विधि से genIp(A) पर कॉल करें
  • उदाहरण (C++)

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

    #include <bits/stdc++.h>
    using namespace std;
    void print_vector(vector<auto> v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    typedef long long int lli;
    class Solution {
       public:
       lli convertToNum(string s,int start, int end){
          lli num = 0;
          for (int i = start; i <= end; i++) {
             num = (num * 10) + (s[i] - '0');
             if (num > 255)
                return 10000;
          }
          return num;
       }
       string addDots(vector <int> positions){
          string res = "";
          int x = 0;
          int posIndex = 0;
          for (int i = 0; i < positions.size(); i++) {
             int num = positions[i];
             ostringstream str1;
             str1 << num;
             string temp = str1.str();
             res += temp;
             if (i < positions.size() - 1)
                res += ".";
             }
             return res;
          }
          void solve(string s, vector <string> &result,vector <int> positions, int dotCount = 3, int startIndex = 0){
             if (!dotCount && ((s.size() - 1) - startIndex + 1) >= 1) {
                int temp = convertToNum(s, startIndex, s.size() - 1);
                if (temp >= 0 && temp <= 255) {
                   positions.push_back(temp);
                   string res = addDots(positions);
                   if (res.size() - 3 == s.size()) {
                      result.push_back(res);
                }
             }
             return;
          }
          for (int i = startIndex; i < s.size(); i++) {
             int temp = convertToNum(s, startIndex, i);
             if (temp >= 0 && temp <= 255) {
                positions.push_back(temp);
                solve(s, result, positions, dotCount - 1, i + 1);
                positions.pop_back();
             }
          }
       }
       vector<string> genIp(string s){
       vector<string> result;
       vector<int> position;
       solve(s, result, position);
       return result;
       }
       vector<string> get_ip(string A) {
       return genIp(A);
    }};
    main(){
       Solution ob;
       string ip = "25525511136";
       print_vector(ob.get_ip(ip));
    }

    इनपुट

    25525511136

    आउटपुट

    [255.255.11.136, 255.255.111.36, ]

    1. एलसीएम खोजने के लिए सी ++ प्रोग्राम

      दो संख्याओं का अल्पतम समापवर्तक (LCM) वह छोटी से छोटी संख्या है जो दोनों का गुणज है। उदाहरण के लिए:मान लें कि हमारे पास निम्नलिखित दो संख्याएं हैं:15 और 9. 15 = 5 * 3 9 = 3 * 3 तो, 15 और 9 का एलसीएम 45 है। दो संख्याओं का LCM ज्ञात करने का कार्यक्रम इस प्रकार दिया गया है - उदाहरण #include <iost

    1. सी ++ प्रोग्राम जीसीडी खोजने के लिए

      दो संख्याओं का सबसे बड़ा सामान्य भाजक (GCD) उन दोनों को विभाजित करने वाली सबसे बड़ी संख्या है। उदाहरण के लिए:मान लें कि हमारे पास 45 और 27 दो संख्याएँ हैं। 45 = 5 * 3 * 3 27 = 3 * 3 * 3 तो, 45 और 27 का GCD 9 है। दो संख्याओं का GCD ज्ञात करने का कार्यक्रम इस प्रकार दिया गया है। उदाहरण #include <

    1. C++ प्रोग्राम एक द्विघात समीकरण के सभी मूल खोजने के लिए

      द्विघात समीकरण ax2 . के रूप में होता है + बीएक्स + सी। द्विघात समीकरण के मूल निम्न सूत्र द्वारा दिए गए हैं - तीन मामले हैं - बी2 <4*a*c - जड़ें असली नहीं होती हैं यानी वे जटिल होती हैं बी2 =4*a*c - मूल वास्तविक हैं और दोनों मूल समान हैं। बी2 4*a*c - जड़ें असली हैं और दोनों जड़ें अलग हैं द्विघ