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

C++ में परमाणुओं की संख्या

मान लीजिए हमारे पास एक रासायनिक सूत्र है; हमें प्रत्येक परमाणु की गिनती ज्ञात करनी है।

एक परमाणु तत्व हमेशा एक अपरकेस वर्ण से शुरू होगा, नाम का प्रतिनिधित्व करने वाले शून्य या अधिक लोअरकेस अक्षर हो सकते हैं। और अगर गिनती 1 से अधिक है तो उस तत्व की गिनती का प्रतिनिधित्व करने वाले 1 या अधिक अंक अनुसरण कर सकते हैं, लेकिन यदि गिनती 1 है, तो कोई अंक नहीं आएगा। उदाहरण के तौर पर, H2O और H2O2 दोनों मान्य हैं, लेकिन H1O2 अमान्य है।

इसलिए, यदि इनपुट Na2(CO)3 जैसा है, तो आउटपुट C3Na2O3 होगा, इसलिए यह 3 कार्बन (C), 2 सोडियम (Na), 3 ऑक्सीजन (O) को इंगित करता है।

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

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

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

  • m -

    . में प्रत्येक कुंजी-मान युग्म 'it' के लिए
    • रिट :=रिट + इसकी कुंजी

    • यदि इसका मान> 1 है, तो -

      • ret :=ret + इसका मान स्ट्रिंग के रूप में

  • वापसी रिट

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

  • एक नक्शा परिभाषित करें मी

  • एक स्टैक सेंट परिभाषित करें

  • मैं :=0, n :=s का आकार

  • जबकि मैं

    • सी:=एस[i]

    • (मैं 1 से बढ़ाइए)

    • यदि c '(' के समान है, तो -

      • सेंट में मी डालें

      • मी :=एक मानचित्र परिभाषित करें

    • अन्यथा जब c ')' के समान हो, तब -

      • वैल:=0

      • जबकि (i

        • वैल:=वैल * 10 + (एस[i] - '0' का ASCII)

        • (मैं 1 से बढ़ाइए)

      • एक नक्शा अस्थायी परिभाषित करें:=सेंट का शीर्ष तत्व

      • सेंट से तत्व हटाएं

      • m -

        . में प्रत्येक कुंजी-मान युग्म 'it' के लिए
        • इसका मूल्य :=इसका मूल्य * वैल

        • अस्थायी [इसकी कुंजी]:=अस्थायी [इसकी कुंजी] + इसका मूल्य

      • एम:=अस्थायी

    • अन्यथा

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

      • वैल:=0

      • नाम:=नाम + ग

      • जबकि (i

        • नाम:=नाम + एस[i]

        • (मैं 1 से बढ़ाइए)

      • जबकि (i

        • वैल:=वैल * 10 + (एस[i] - '0' का ASCII)

        • (मैं 1 से बढ़ाइए)

      • वैल:=(यदि वैल 0 के समान है, तो 1 अन्यथा वैल)

      • एम [नाम]:=एम [नाम] + वैल

  • वापसी makeRet(एम)

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   string makeRet(map<string, int> m){
      string ret = "";
      for (auto& it : m) {
         ret += it.first;
         if (it.second > 1) {
            ret += to_string(it.second);
         }
      }
      return ret;
   }
   string countOfAtoms(string s){
      map<string, int> m;
      stack<map<string, int> > st;
      int i = 0;
      int n = s.size();
      while (i < n) {
         char c = s[i];
         i++;
         if (c == '(') {
            st.push(m);
            m = map<string, int>();
         }
         else if (c == ')') {
            int val = 0;
            while (i < n && s[i] >= '0' && s[i] <= '9') {
               val = val * 10 + (s[i] - '0');
               i++;
            }
            map<string, int> temp = st.top();
            st.pop();
            for (auto& it : m) {
               it.second *= val;
               temp[it.first] += it.second;
            }
            m = temp;
         }  
         else {
            string name = "";
            int val = 0;
            name += c;
            while (i < n && s[i] >= 'a' && s[i] <= 'z') {
               name += s[i];
               i++;
            }
            while (i < n && s[i] >= '0' && s[i] <= '9') {
               val = val * 10 + (s[i] - '0');
               i++;
            }
            val = val == 0 ? 1 : val;
            m[name] += val;
         }
      }
      return makeRet(m);
   }
};
main(){
   Solution ob;
   cout << (ob.countOfAtoms("Na2(CO)3"));
}

इनपुट

Na2(CO)3

आउटपुट

C3Na2O3

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

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

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

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

  1. C++ में एडम नंबर

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