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

C++ में स्ट्रोबोग्रामेटिक नंबर II


मान लीजिए हमारे पास लंबाई n है। हमें उन सभी स्ट्रोबोग्रामेटिक नंबर्स को ढूंढना है जिनकी लंबाई n है।

जैसा कि हम जानते हैं कि एक स्ट्रोबोग्रामेटिक नंबर वह संख्या है जो 180 डिग्री घुमाने पर समान दिखती है।

इसलिए, यदि इनपुट है n = 2, तो आउटपुट होगा ["11","69","88","96"]

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

  • एक ऐरे ret परिभाषित करें

  • यदि n विषम है, तो -

    • "0" को ret के अंत में डालें

    • "1" को ret के अंत में डालें

    • "8" को ret के अंत में डालें

  • अन्यथा

    • खाली स्ट्रिंग को ret के अंत में डालें

  • n > 1 के लिए, n := n - 2 अपडेट करते हुए, करें -

    • एक ऐरे temp परिभाषित करें

    • i := 0 से शुरू करें, जब i < ret का आकार, i बढ़ाते हुए, करें -

      • s := ret[i]

      • यदि n > 3, तो -

        • "0" + s + "0" को temp के अंत में डालें

      • "1" + s + "1" को temp के अंत में डालें

      • "8" + s + "8" को temp के अंत में डालें

      • "6" + s + "9" को temp के अंत में डालें

      • "9" + s + "6" को temp के अंत में डालें

    • ret := temp

  • ret लौटाएं

उदाहरण

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

#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; } class Solution { public:    vector<string> findStrobogrammatic(int n) {       vector<string> ret;       if (n & 1) {          ret.push_back("0");          ret.push_back("1");          ret.push_back("8");       }       else {          ret.push_back("");       }       for (; n > 1; n -= 2) {          vector<string> temp;          for (int i = 0; i < ret.size(); i++) {             string s = ret[i];             if (n > 3) {                temp.push_back("0" + s + "0");             }             temp.push_back("1" + s + "1");             temp.push_back("8" + s + "8");             temp.push_back("6" + s + "9");             temp.push_back("9" + s + "6");          }          ret = temp;       }       return ret;    } }; main(){    Solution ob;    print_vector(ob.findStrobogrammatic(3)); }

इनपुट

3

आउटपुट

[101, 808, 609, 906, 111, 818, 619, 916, 181, 888, 689, 986, ]

  1. - C++ में मितव्ययी संख्या (Frugal Number)

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया गया है। हमारा कार्य यह जांचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या (FRUGAL NUMBER) − एक संख्या जिसके अंकों की संख्या उस संख्या के अभाज्य गुणनखंडन में अंकों की संख्या से सख्ती से अधिक है। उदाहरण &

  1. C++ में पेंटाटोप संख्या C++ में पेंटाटोप संख्या

    एक पेंटाटोप संख्या को पास्कल के त्रिभुज में पांचवीं संख्या के रूप में वर्णित किया गया है। अब, चूंकि यह पांचवीं संख्या है, इसका मतलब है कि पास्कल के त्रिभुज में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है जो पास्कल के त्रिभुज की चौथी पंक्ति है। तो, इस

  1. - C++ में एडम नंबर जांचना

    इस खंड में हम देखेंगे कि दी गई संख्या एडम नंबर है या नहीं, इसकी जांच करने वाला प्रोग्राम कैसे लिखें। कोड में जाने से पहले देखते हैं कि एडम नंबर क्या है? एडम नंबर वह संख्या है, मान लीजिए n, यदि n का वर्ग और n के रिवर्स का वर्ग एक-दूसरे के रिवर्स हैं, तो वह संख्या एडम नंबर है। उदाहरण के लिए संख्या 13