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

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


मान लीजिए कि हम (निम्न और उच्च) की सीमा में मौजूद कुल स्ट्रोबोग्रामेटिक संख्याओं की गणना करने के लिए एक फ़ंक्शन को परिभाषित करना चाहते हैं। जैसा कि हम जानते हैं कि एक स्ट्रोबोग्रामेटिक संख्या एक संख्या है जो 180 डिग्री घुमाए जाने पर समान दिखती है।

इसलिए, यदि इनपुट निम्न ="50", उच्च ="100" जैसा है, तो आउटपुट 3 होगा, क्योंकि तीन परिणाम हैं, 69, 88, और 96।

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

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

  • एक सरणी रिट परिभाषित करें

  • अगर n और 1 गैर-शून्य है, तो -

    • रिट के अंत में "0" डालें

    • रिट के अंत में "1" डालें

    • रिट के अंत में "8" डालें

  • अन्यथा

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

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

    • एक सरणी अस्थायी परिभाषित करें

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

      • एस:=सेवानिवृत्त [i]

      • यदि n> 3, तो -

        • अस्थायी के अंत में "0" + s + "0" डालें

      • अस्थायी के अंत में "1" + s + "1" डालें

      • अस्थायी के अंत में "8" + s + "8" डालें

      • अस्थायी के अंत में "6" + s + "9" डालें

      • अस्थायी के अंत में "9" + s + "6" डालें

    • रिट:=अस्थायी

  • वापसी रिट

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

  • रिट:=0

  • सरणी को परिभाषित करें v

  • इनिशियलाइज़ i के लिए:=कम का आकार, जब मैं <=उच्च का आकार, अद्यतन (i 1 से बढ़ाएँ), करें -

    • v :=ढूढें स्ट्रोबोग्राममैटिक(i)

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

      • ret :=ret + (1 जब v[j] की लंबाई> निम्न की लंबाई और उच्च की लंबाई> v[j] की लंबाई)

  • वापसी रिट

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
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;
   }
   bool compare(string a, string b){
      return a.size() == b.size() ? a >= b : a.size() > b.size();
   }
   int strobogrammaticInRange(string low, string high) {
      int ret = 0;
      vector<string> v;
      for (int i = low.size(); i <= high.size(); i++) {
         v = findStrobogrammatic(i);
         for (int j = 0; j < v.size(); j++) {
            ret += compare(v[j], low) && compare(high, v[j]);
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   cout <<(ob.strobogrammaticInRange("50", "100"));
}

इनपुट

"50","100"

आउटपुट

3

  1. C++ में मितव्ययी संख्या

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

  1. सी++ पेंटाटोप नंबर

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

  1. C++ . में बदसूरत संख्या III

    मान लीजिए हमें n-th बदसूरत संख्या खोजने के लिए एक प्रोग्राम लिखना है। बदसूरत संख्याएँ धनात्मक पूर्णांक होती हैं जो a या b या c से विभाज्य होती हैं। उदाहरण के लिए, यदि n =3 और a =2, b =3 और c =5, तो आउटपुट 4 होगा, क्योंकि बदसूरत संख्याएँ हैं [2,3,4,5,6,8,9,10] , तीसरा वाला 4 है। इसे हल करने के लिए,