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

C++ में समान क्रमागत अंतर वाली संख्याएं (Numbers With Same Consecutive Differences)


मान लीजिए हमें लंबाई N के सभी गैर-ऋणात्मक पूर्णांक खोजने हैं जिनमें हर दो क्रमागत अंकों के बीच निरपेक्ष अंतर K है। ध्यान रखें कि उत्तर में प्रत्येक संख्या में लीडिंग जीरो नहीं होने चाहिए, संख्या 0 को छोड़कर। हम उत्तर को किसी भी क्रम में लौटा सकते हैं।

उदाहरण के लिए, यदि N = 3 और K = 7, तो आउटपुट [181,292,707,818,929] होगा। यहां 070 वैध संख्या नहीं है क्योंकि इसमें एक लीडिंग जीरो है।

समाधान दृष्टिकोण

  1. आकार n+1 का एक dp मैट्रिक्स बनाएं, dp[1] में 1 से 9 भरें

  2. i को 1 से N-1 तक लूप चलाएं

  3. प्रत्येक संख्या के लिए, अंतिम अंक ± K से अगला अंक बनाएं

  4. विजिटेड सेट से डुप्लिकेट से बचें

  5. यदि N=1 तो 0 भी जोड़ें

  6. dp[N] लौटाएं

C++ कार्यान्वयन

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

void print_vector(vector<int> v){ 
    cout << "["; 
    for(int i = 0; i < v.size(); i++){ 
        cout << v[i] << ", "; 
    } 
    cout << "]" << endl; 
} 

class Solution { 
public: 
    vector<int> numsSameConsecDiff(int N, int K) { 
        vector<int> dp[N + 1]; 
        for(int i = 1; i <= 9; i++){ 
            dp[1].push_back(i); 
        } 
        for(int i = 1; i < N; i++){ 
            set<int> visited; 
            for(int j = 0; j < dp[i].size(); j++){ 
                int x = dp[i][j]; 
                int lastNum = x % 10; 
                int digit = lastNum + K; 
                if(digit >= 0 && digit <= 9 && !visited.count(x * 10 + digit)){ 
                    dp[i + 1].push_back(x * 10 + digit); 
                    visited.insert(x * 10 + digit); 
                } 
                digit = lastNum - K; 
                if(digit >= 0 && digit <= 9 && !visited.count(x * 10 + digit)){ 
                    dp[i + 1].push_back(x * 10 + digit); 
                    visited.insert(x * 10 + digit); 
                } 
            } 
        } 
        if(N == 1){ 
            dp[N].push_back(0); 
        } 
        return dp[N]; 
    } 
}; 

int main(){ 
    Solution ob; 
    print_vector(ob.numsSameConsecDiff(3,7)); 
    return 0; 
}

इनपुट

3 7

आउटपुट

[181,292,707,818,929]
  1. - C++ प्रोग्राम: दो संख्याएं ढूंढें जिनका योग और गुणनफल दोनों N के समान हों

    इस ट्यूटोरियल में, हम एक प्रोग्राम पर चर्चा करेंगे जो दो संख्याएं (मान लीजिए a और b) ढूंढता है जैसे कि दोनों a + b = N और a * b = N संतुष्ट हों। a को दोनों समीकरणों से हटाने पर, हमें b और N में एक द्विघात समीकरण मिलता है यानी b² - bN + N = 0 इस समीकरण के दो मूल होंगे जो हमें a और b दोनों का मान दें

  1. - C++ में सरणी इंडेक्स जहां दोनों तरफ सम या विषम संख्याओं की गिनती समान हो

    यहां हम एक समस्या देखेंगे, मान लीजिए एक सरणी दी गई है। इसमें n तत्व हैं। हमें एक इंडेक्स ढूंढना है, जहां उसके बाईं ओर सम संख्याओं की आवृत्ति और उसके दाईं ओर सम संख्याओं की आवृत्ति समान हो, या उसके बाईं ओर विषम संख्याओं की आवृत्ति उसके दाईं ओर विषम संख्याओं की आवृत्ति के समान हो। यदि ऐसा कोई परिणाम न

  1. - पायथन में समान लगातार अंतर वाली संख्याएं खोजने का प्रोग्राम

    मान लीजिए हमें आकार N का एक ऐरे ढूंढना है जिससे हर दो लगातार अंकों के बीच का निरपेक्ष अंतर K हो। उत्तर में हर संख्या में लीडिंग जीरो नहीं होने चाहिए सिवाय संख्या 0 के। उदाहरण के लिए, यदि इनपुट N = 4, K = 7 है, तो आउटपुट [1818, 2929, 7070, 8181, 9292] होगा, यहां 0707 वैध नहीं है क्योंकि इसमें लीडिंग