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

सुपर पैलिंड्रोम C++ में

मान लीजिए हमारे पास एक धनात्मक पूर्णांक N है, जिसे सुपरपैलिंड्रोम कहा जाता है यदि यह एक पैलिंड्रोम है, और यह एक पैलिंड्रोम का वर्ग भी है। अब हमारे पास दो धनात्मक पूर्णांक L और R हैं, हमें [L, R] की समावेशी रेंज में सुपरपैलिंड्रोम की संख्या ढूंढनी है।

उदाहरण के लिए, यदि L = 5 और R = 500, तो आउटपुट 3 होगा, सुपरपैलिंड्रोम हैं 9, 121, 484।

हल करने का दृष्टिकोण

हम सभी पैलिंड्रोम रूट उत्पन्न करते हैं जिनके वर्ग रेंज में आते हैं:

  • lb = sqrt(L), ub = sqrt(R) की गणना करें

  • सभी पैलिंड्रोम संख्याओं को lb से ub तक पुनरावर्ती रूप से उत्पन्न करें

  • सम और विषम लंबाई के पैलिंड्रोम के लिए अलग-अलग निर्माण

  • प्रत्येक पैलिंड्रोम रूट के लिए, जांचें कि क्या उसका वर्ग भी पैलिंड्रोम है

  • मान्य सुपरपैलिंड्रोम की गणना करें

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 

class Solution { 
    int ans = 0; 
public: 
    int superpalindromesInRange(string L, string R){ 
        long double lb = sqrtl(stol(L)), ub = sqrtl(stol(R)); 
        int M = log10l(ub) + 1; 
        
        for (int z = 0; z <= 9; z++) { 
            helper(z, 1, M, lb, ub); 
            helper(11 * z, 2, M, lb, ub); 
        } 
        return ans; 
    } 
    
private: 
    void helper(long x, int m, int M, long double lb, long double ub){ 
        if (x > ub) return; 
        if (x >= lb && is_palindrome(x * x)) ans++; 
        
        for (int i = 1; m + 2 * i <= M; i++) { 
            long W = powl(10, m + 2 * i - 1) + 1; 
            long w = powl(10, i); 
            for (int z = 1; z <= 9; z++) 
                helper(z * W + x * w, m + 2 * i, M, lb, ub); 
        } 
    } 
    
    bool is_palindrome(long x){ 
        if (x == 0) return true; 
        if (x % 10 == 0) return false; 
        long left = x, right = 0; 
        while (left >= right) { 
            if (left == right || left / 10 == right) return true; 
            right = 10 * right + (left % 10), left /= 10; 
        } 
        return false; 
    } 
}; 

int main(){ 
    Solution ob; 
    cout << (ob.superpalindromesInRange("5", "500")); 
    return 0;
}

इनपुट

"5", "500"

आउटपुट

3
  1. - C++ में एनकैप्सुलेशन (Encapsulation)

    एनकैप्सुलेशन क्या है? डेटा और उस डेटा को मैनिपुलेट करने वाले मेथड्स को एक ही घटक (क्लास) में बांधना और बाहरी हस्तक्षेप से बचाना। डेटा छिपाने (data hiding) की ओर ले जाता है। C++ में कार्यान्वयन क्लासेस (उपयोगकर्ता-परिभाषित डेटा प्रकार) का उपयोग करके। क्लास डेटा सदस्यों और मेथड्स को एक साथ बांधती है

  1. - C++ में आइडेंटिफायर

    C++ आइडेंटिफायर एक नाम है जिसका उपयोग वेरिएबल, फ़ंक्शन, क्लास, मॉड्यूल, या किसी अन्य उपयोगकर्ता-परिभाषित आइटम की पहचान के लिए किया जाता है। एक आइडेंटिफायर A से Z या a से z तक के अक्षर या अंडरस्कोर (_) से शुरू होता है जिसके बाद शून्य या अधिक अक्षर, अंडरस्कोर, और अंक (0 से 9) आ सकते हैं। C++ आइडेंटिफ

  1. - लिनक्स पर C++ के लिए सर्वश्रेष्ठ IDE कौन सा है?

    बड़े प्रोजेक्ट्स को केवल टेक्स्ट एडिटर्स पर प्रबंधित करना मुश्किल होता है। ऐसे मामलों में IDE का उपयोग करने से आप अधिक उत्पादक और कम निराश होंगे। विभिन्न प्रकार के IDE उपलब्ध हैं और आपको अपनी आवश्यकताओं के अनुरूप सही चुनना चाहिए। लिनक्स पर C++ के लिए कोई एक सर्वश्रेष्ठ IDE नहीं है; आपको अपने टूल को