কম্পিউটার টিউটোরিয়াল

সি++-এ নাম্বার্স উইথ সেম কনসিকিউটিভ ডিফারেন্সেস (Numbers With Same Consecutive Differences)


মান লেযিয়ে N দৈর্ঘ্যের সব নন-নেগেটিভ পূর্ণসংখ্যা খুঁজে বের করতে হবে যাতে প্রতিটি দুটি последователী ডিজিটের পরস্পর निरপেক্ষ পার্থক্য K হয়। মনে রাখতে হবে প্রতিটি সংখ্যার লিডিং জিরো থাকবে না, ০ সংখ্যাটি বাদে। উত্তর যেকোনো ক্রমে দেওয়া যেতে পারে। N = 3, K = 7 হলে আউটপুট [181,292,707,818,929]। এখানে 070 ভ্যালিড নয় কারণ এর লিডিং জিরো আছে।

এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব -

  • dp নামে একটি ম্যাট্রিক্স তৈরি করুন, আকার n+1, dp[1]-এ ১ থেকে ৯ ইনসার্ট করুন

  • i = 1 থেকে N-1 পর্যন্ত লুপ চালান

    • visited নামে একটি সেট তৈরি করুন

    • j = 0 থেকে dp[i].size()-1 পর্যন্ত লুপ চালান

      • x := dp[i][j]

      • lastNum := x-এর শেষ ডিজিট

      • digit := lastNum + k

      • যদি digit ০ থেকে ৯-এর মধ্যে থাকে এবং (x*10 + digit) visited-এ না থাকে, তবে

        • (10*x + digit) dp[i+1]-এ ইনসার্ট করুন

        • 10*x + digit visited-এ ইনসার্ট করুন

      • digit := lastNum - K

      • যদি digit ০ থেকে ৯-এর মধ্যে থাকে এবং (x*10 + digit) visited-এ না থাকে, তবে

        • (10*x + digit) dp[i+1]-এ ইনসার্ট করুন

        • 10*x + digit visited-এ ইনসার্ট করুন

  • যদি N == 1 হয়, dp[N]-এ ০ ইনসার্ট করুন

  • 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++-এ liên tục সংখ্যার সমষ্টি N হলে সিকোয়েন্স প্রিন্ট

  2. C++ প্রোগ্রাম: দুটি সংখ্যা বের করা যাদের যোগফল ও গুণফল N-র সমান

  3. C++-এ অ্যারে ইনডেক্স যেখানে বাম ও ডান পাশে জোড় বা বিজোড় সংখ্যার কাউন্ট সমান

  4. পাইথনে একই लगাতার পার্থক্য वाली সংখ্যাগুলো খুঁজে বের করার প্রোগ্রাম