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

सी ++ में समान लगातार अंतर वाले नंबर

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

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

  • dp नामक एक मैट्रिक्स बनाएं, और इसका आकार n + 1 होगा, dp में 1 से 9 तक भरें[1]

  • मैं के लिए 1 से एन -1 तक की सीमा में

    • देखे गए सेट को परिभाषित करें

    • j के लिए 0 से dp के आकार के बीच[i]

      • एक्स:=डीपी [आई, जे]

      • lastNum :=x का अंतिम अंक

      • अंक :=lastNum + k

      • यदि अंक 0 से 9 की सीमा में है, और (x*10 + अंक) नहीं देखा गया है, तो

        • dp[i + 1]

          . में (10*x + अंक) डालें
        • देखे गए सरणी में 10*x + अंक डालें

      • अंक :=lastNum – K

      • यदि अंक 0 से 9 की सीमा में है, और (x*10 + अंक) नहीं देखा गया है, तो

        • dp[i + 1]

          . में (10*x + अंक) डालें
        • देखे गए सरणी में 10*x + अंक डालें

  • अगर N 1 है, तो dp[N]

    . में 0 डालें
  • वापसी डीपी [एन]

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

उदाहरण

#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];
   }
};
main(){
   Solution ob;
   print_vector(ob.numsSameConsecDiff(3,7));
}

इनपुट

3
7

आउटपुट

[181,292,707,818,929]

  1. सी ++ प्रोग्राम दो संख्याओं को योग और उत्पाद दोनों के साथ खोजने के लिए एन के समान है

    इस ट्यूटोरियल में, हम दो संख्याओं (जैसे ए और बी) को खोजने के लिए एक प्रोग्राम पर चर्चा करेंगे, जैसे कि दोनों a+b = N and a*b = N are satisfied. दोनों समीकरणों में से a को हटाने पर हमें b और N में द्विघात समीकरण मिलता है, यानी b2 - bN + N = 0 इस समीकरण के दो मूल होंगे जो हमें a और b दोनों का मान दे

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

    यहां हम एक समस्या देखेंगे, मान लीजिए कि एक सरणी दी गई है। एन तत्व हैं। हमें एक सूचकांक ज्ञात करना है, जहाँ इसके बायीं ओर की सम संख्याओं की बारंबारता और इसके दायीं ओर की सम संख्याओं की बारंबारता समान हो, या इसके बायीं ओर की विषम संख्याओं की आवृत्ति इसके दाईं ओर की विषम संख्याओं की आवृत्ति के समान हो।

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

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