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

सी++ में निकटतम पालिंड्रोम खोजें

मान लीजिए कि हमारे पास एक संख्या n है, हमें निकटतम संख्या प्राप्त करनी है जो पैलिंड्रोम है। तो पैलिंड्रोम उस संख्या से कम या अधिक हो सकता है जिसका पूर्ण अंतर छोटा है। तो अगर संख्या 145 की तरह है, तो परिणाम 141 होगा।

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

  • sn :=n का आकार
  • यदि sn 1 के समान है, तो −
    • n[0] को 1 से घटाएं और 1s आकार n[0]
    • की एक स्ट्रिंग लौटाएं
  • आधा_sn :=(sn + 1) / 2
  • हाफ_वल:=स्टोल (इंडेक्स 0 से हाफ_एसएन तक n का सबस्ट्रिंग
  • एक सरणी उम्मीदवारों को परिभाषित करें ={10^(sn) - 1, 10^(sn - 1) - 1, 10^(sn - 1) + 1, 10^(sn)+1
  • एक सरणी परिभाषित करें fmdc ={ आधा_वल, आधा_वल - 1, आधा_वल + 1}
  • fmds में प्रत्येक मान c के लिए
    • रेव :=c को स्ट्रिंग में बदलें
    • यदि sn mod 2 गैर-शून्य है, तो −
      • Rev से अंतिम तत्व हटाएं
    • रिवर्स रेव रिवर्स
    • उम्मीदवारों के अंत में c डालें
  • सरणी उम्मीदवारों को क्रमबद्ध करें
  • वैल:=n पूर्णांक के रूप में
  • उम्मीदवारों में प्रत्येक उम्मीदवार के लिए -
    • यदि उम्मीदवार वैल के समान है, तो −
      • निम्न भाग पर ध्यान न दें, अगले भाग पर जाएं
    • diff :=abs|उम्मीदवार - वैल|
    • यदि भिन्न
    • min_diff :=diff
    • उत्तर:=उम्मीदवार को स्ट्रिंग में बदलें
  • वापसी उत्तर
  • आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       string nearestPalindromic(string n) {
          int sn = n.size();
          if(sn == 1){
          return string(1, --n[0]);
       }
       int half_sn = (sn+1)/2;
       long half_val = stol(n.substr(0, half_sn));
       vector<long> candidates = {pow(10, sn)-1, pow(10, sn-1)-1, pow(10, sn-1)+1, pow(10, sn)+1};
       vector <long> fmdc = {half_val, half_val-1,half_val+1};
       for(long c:fmdc){
          string rev = to_string(c);
          if(sn%2)rev.pop_back();
          reverse(rev.begin(),rev.end());
          candidates.push_back(stol(to_string(c) + rev));
       }
       sort(candidates.begin(), candidates.end());
       string ans;
       long val = stol(n), min_diff = INT_MAX;
       for(long candidate : candidates){
          if(candidate == val)continue;
          long diff = labs(candidate - val);
          if(diff < min_diff){
             min_diff = diff;
             ans = to_string(candidate);
             }
          }
          return ans;
       }
    };
    main(){
       Solution ob;
       cout << (ob.nearestPalindromic("145"));
    }

    इनपुट

    “145”

    आउटपुट

    141

    1. C++ में त्रिभुज के केंद्रक को खोजने का कार्यक्रम

      इस समस्या में, हमें एक 2D सरणी दी गई है जो त्रिभुज के तीन शीर्षों के निर्देशांकों को दर्शाती है। हमारा काम C++ में त्रिभुज के Centroid को खोजने के लिए एक प्रोग्राम बनाना है। सेंट्रोइड त्रिभुज का वह बिंदु है जिस पर त्रिभुज की तीन माध्यिकाएं प्रतिच्छेद करती हैं। माध्यिका त्रिभुज की वह रेखा है जो त्र

    1. C++ में समांतर चतुर्भुज का क्षेत्रफल ज्ञात करने का कार्यक्रम

      इस समस्या में, हमें दो मान दिए गए हैं जो समांतर चतुर्भुज के आधार और ऊंचाई को दर्शाते हैं। हमारा कार्य C++ में समांतर चतुर्भुज का क्षेत्रफल ज्ञात करने के लिए एक प्रोग्राम बनाना है। समांतर चतुर्भुज एक चार भुजा बंद आकृति है जिसकी विपरीत भुजाएँ एक दूसरे के समान और समानांतर हैं। समस्या को समझने के लि

    1. सी ++ में बाइनरी ट्री में निकटतम पत्ता खोजें

      मान लीजिए, एक बाइनरी ट्री दिया गया है। इसमें विभिन्न स्तरों पर पत्ती की गांठें होती हैं। एक और पॉइंटर दिया गया है, जो एक नोड की ओर इशारा कर रहा है। हमें नुकीले नोड से निकटतम लीफ नोड की दूरी ज्ञात करनी होगी। विचार करें कि पेड़ नीचे जैसा है - यहां लीफ नोड्स 2, -2 और 6 हैं। यदि पॉइंटर नोड -5 की ओर इ