কম্পিউটার

C++ এ একই ধারাবাহিক পার্থক্য সহ সংখ্যা


ধরুন আমাদের N দৈর্ঘ্যের সমস্ত অ-ঋণাত্মক পূর্ণসংখ্যা খুঁজে বের করতে হবে যাতে প্রতি দুটি পরপর সংখ্যার মধ্যে পরম পার্থক্য হল K। আমাদের মনে রাখতে হবে যে উত্তরের প্রতিটি সংখ্যার 0 নম্বরটি ছাড়া অবশ্যই অগ্রণী শূন্য থাকবে না। আমরা যেকোনো ক্রমে উত্তর ফেরত দিতে পারি। তাই যদি N =3 এবং K =7, তাহলে আউটপুট হবে [181,292,707,818,929], এখানে আমরা দেখতে পাচ্ছি 070 একটি বৈধ সংখ্যা নয়, কারণ এটির একটি অগ্রণী শূন্য রয়েছে।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • dp নামে একটি ম্যাট্রিক্স তৈরি করুন এবং এর আকার হবে n + 1, 1 থেকে 9 dp এ পূরণ করুন[1]

  • 1 থেকে N – 1

    রেঞ্জের জন্য i
    • পরিদর্শন বলে একটি সেট সংজ্ঞায়িত করুন

    • j এর জন্য রেঞ্জ 0 থেকে dp[i>

      এর আকার
      • x :=dp[i, j]

      • 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 ঢোকান
  • dp[N>

    ফেরত দিন

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#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. C++ এ যোগফল N দিয়ে পরপর সংখ্যার সম্ভাব্য সকল যোগফল প্রিন্ট করুন

  2. C++ প্রোগ্রাম যোগফল এবং গুণফল উভয়ই N এর মতো একই সহ দুটি সংখ্যা খুঁজে বের করতে

  3. C++ এ উভয় পাশে জোড় বা বিজোড় সংখ্যার একই গণনা সহ অ্যারে সূচক

  4. পাইথনে একই ধারাবাহিক পার্থক্য সহ সংখ্যাগুলি খুঁজে বের করার প্রোগ্রাম