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

C++ में निकटतम पालिंड्रोम ढूंढना (Find the Closest Palindrome)


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

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

  • sn := n का आकार
  • यदि sn, 1 के समान है, तो -
    • n[0] को 1 से घटाएं और n[0] के आकार की 1s की स्ट्रिंग वापस करें
  • half_sn := (sn + 1) / 2
  • half_val := n के इंडेक्स 0 से half_sn तक के सबस्ट्रिंग का stol
  • एक ऐरे candidates = {10^(sn) - 1, 10^(sn - 1) - 1, 10^(sn - 1) + 1, 10^(sn)+1 परिभाषित करें
  • एक ऐरे fmdc = { half_val, half_val - 1, half_val + 1 } परिभाषित करें
  • fmds में प्रत्येक मान c के लिए
    • rev := c को स्ट्रिंग में बदलें
    • यदि sn mod 2 शून्येतर है, तो -
      • rev से अंतिम तत्व हटाएं
    • rev ऐरे को उल्टा करें
    • candidates के अंत में c डालें
  • candidates ऐरे को सॉर्ट करें
  • val := n को पूर्णांक के रूप में
  • candidates में प्रत्येक candidate के लिए -
    • यदि candidate, val के समान है, तो -
      • अगले भाग को अनदेखा करें, अगले पुनरावृत्ति पर जाएं
    • diff := |candidate - val|
    • यदि diff < min_diff, तो -
      • min_diff := diff
      • ans := candidate को स्ट्रिंग में बदलें
  • ans वापस करें

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

उदाहरण

#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++ में वेरिएबल नंबर ऑफ आर्गुमेंट्स

    कभी-कभी, आप एक ऐसी स्थिति का सामना कर सकते हैं, जब आप एक ऐसा फंक्शन चाहते हैं, जो वेरिएबल नंबर ऑफ आर्गुमेंट्स ले सके, यानी, पैरामीटर्स, पूर्वनिर्धारित संख्या के पैरामीटर्स के बजाय। C/C++ प्रोग्रामिंग लैंग्वेज इस स्थिति के लिए एक समाधान प्रदान करती है और आपको एक ऐसा फंक्शन डिफाइन करने की अनुमति देती

  1. - C++ में CHAR_BIT

    CHAR_BIT क्या है? CHAR_BIT एक बाइट में बिट्स की संख्या दर्शाता है। <climits> या <limits.h> हेडर में परिभाषित। आमतौर पर 8 बिट्स प्रति बाइट होता है। C++ प्रोग्राम उदाहरण #include <bits/stdc++.h> using namespace std; int main() { int x = 28; int total_bits = CHAR_BIT * size

  1. - C++ प्रोग्राम: गुणन तालिका जनरेट करें

    परिचयगुणन तालिका किसी भी संख्या के लिए गुणन संक्रिया को परिभाषित करने के लिए उपयोग की जाती है। यह आमतौर पर आधार दस संख्याओं के साथ प्राथमिक अंकगणितीय संक्रियाओं की नींव रखने के लिए उपयोग की जाती है। किसी भी संख्या की गुणन तालिका 10 तक लिखी जाती है। प्रत्येक पंक्ति में, संख्या का 1 से 10 तक गुणनफल प्