কম্পিউটার

C++ এ ধাপে নম্বর


ধরুন আমাদের নিম্ন এবং উচ্চ দুটি পূর্ণসংখ্যা আছে, আমাদেরকে [নিম্ন, উচ্চ] পরিসরের সমস্ত ধাপ সংখ্যার একটি সাজানো তালিকা খুঁজতে হবে এবং দেখাতে হবে। একটি স্টেপিং নম্বর হল একটি পূর্ণসংখ্যা মানে এর সমস্ত সংলগ্ন সংখ্যাগুলির মধ্যে ঠিক 1 এর পরম পার্থক্য রয়েছে। উদাহরণস্বরূপ, 321 একটি স্টেপিং নম্বর কিন্তু 421 নয়। তাই যদি ইনপুট কম হয় :=0 এবং উচ্চ :=21, তাহলে ফলাফল হবে [0,1,2,3,4,5,6,7,8,9,10,12,21]

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

  • একটি অ্যারে টেম্প তৈরি করুন
  • সলভ() নামে একটি পদ্ধতি তৈরি করুন, এটি উচ্চ, বীজ এবং লেন লাগবে। লেনটি প্রাথমিকভাবে 0
  • যদি বীজ> উচ্চ হয়, তাহলে ফিরে আসুন
  • টেম্প অ্যারেতে বীজ ঢোকান
  • যদি বীজ 0 হয়, তাহলে
    • আমি 1 থেকে 9 রেঞ্জের জন্য, সমাধান সম্পাদন করুন(high, i, 1)
  • অন্যথায়
    • lastDigit :=বীজ মোড 10
    • যদি lastDigit>=1 এবং len + 1 <=10 হয়, তাহলে সমাধান করুন(high, (seed*10) + lastDigit – 1, len + 1)
    • যদি lastDigit <=8 এবং len + 1 <=10 হয়, তাহলে সমাধান করুন(high, (seed*10) + lastDigit + 1, len + 1)
  • প্রধান পদ্ধতিটি হবে −
  • এর মত
  • সমাধান (উচ্চ, 0, 0)
  • টেম্প অ্যারে সাজান
  • একটি অ্যারে উত্তর তৈরি করুন
  • আমি রেঞ্জ 0 থেকে টেম্প সাইজ - 1
    • যদি temp[i]>=কম হয়, তাহলে উত্তরে temp[i] লিখুন
  • উত্তর ফেরত দিন

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

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
typedef long long int lli;
class Solution {
public:
   vector <lli> temp;
   void solve(int high,lli seed=0, int len =0){
      if(seed>high){
         return;
      }
      temp.push_back(seed);
      if(!seed){
         for(int i =1;i<=9;i++){
            solve(high,i,1);
         }
      } else {
         int lastDigit = seed%10;
         if(lastDigit>=1 && len+1<=10)
            solve(high, (seed*10) + lastDigit-1,len+1);
         if(lastDigit<=8 && len+1<=10)
         solve(high, (seed*10) + lastDigit+1,len+1);
      }
   }
   vector<int> countSteppingNumbers(int low, int high) {
      solve(high);
      sort(temp.begin(),temp.end());
      vector <int> ans;
      for(int i =0;i<temp.size();i++){
         if(temp[i]>=low)ans.push_back(temp[i]);
      }
      return ans;
   }
};
main(){
   Solution ob;
   print_vector(ob.countSteppingNumbers(0,40));
}

ইনপুট

0
40

আউটপুট

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 21, 23, 32, 34, ]

  1. সন্তোষজনক সংখ্যার সংখ্যা m + যোগফল(m) + যোগফল(সমষ্টি(m)) =C++ এ N

  2. C++ এ সমমানের সংখ্যা

  3. C++ এ এমেরপ সংখ্যা

  4. সি++ এ ডুডেনি নম্বর