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

রেঞ্জে K-এর চেয়ে বেশি নন-জিরো ডিজিট না থাকা সংখ্যার গণনা (C++)

একটি ইন্টিজার রেঞ্জ দেওয়া আছে start থেকে end পর্যন্ত এবং একটি ভেরিয়েবল k। কাজ হল রেঞ্জে এমন সংখ্যাগুলোর সংখ্যা বের করা যাদের নন-জিরো ডিজিটের সংখ্যা k-এর চেয়ে বেশি নয়।

উদাহরণ

ইনপুট - int start = 50, end = 100, K = 2

আউটপুট - রেঞ্জে K-এর চেয়ে বেশি নন-জিরো ডিজিট না থাকা সংখ্যা: 50

ব্যাখ্যা - ৫০ থেকে ১০০ পর্যন্ত সব সংখ্যা ২-ডিজিট (১০০ বাদে ৩-ডিজিট কিন্তু তারও ২টি জিরো)। তাই সবই শর্ত পূরণ করে। কাউন্ট ৫০।

ইনপুট - int start = 50, end = 100, K = 1

আউটপুট - রেঞ্জে K-এর চেয়ে বেশি নন-জিরো ডিজিট না থাকা সংখ্যা: 5

ব্যাখ্যা - ৫০ থেকে ১০০ পর্যন্ত নন-জিরো ডিজিট ১ বা তার কম থাকা সংখ্যা: ৫০, ৬০, ৭০, ৮০, ৯০। কাউন্ট ৫।

প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • রেঞ্জ এবং k ইনপুট নিয়ে ফাংশনে পাস করুন।
  • ভেক্টর vec ডিক্লেয়ার করুন।
  • হোয়াইল লুপে val-এর ডিজিটগুলো vec-এ পুশ করুন এবং রিভার্স করুন।
  • অ্যারে -1 দিয়ে ইনিশিয়ালাইজ করুন (memset)।
  • check_val(0, 0, 0, vec) রিটার্ন করুন।
  • check_val ফাংশনে:
    • যদি place == vec.size() হয় তবে temp <= K হলে ১ রিটার্ন করুন অন্যথায় ০।
    • যদি arr[place][temp][set_val] != -1 হয় তবে সেটি রিটার্ন করুন।
    • count=0, val = (set_val ? 9 : vec[place])।
    • i=0 থেকে val পর্যন্ত লুপ: temp_2 = temp; যদি i != 0 হয় তবে temp_2++। temp_3 = set_val; যদি i < vec[place] হয় তবে temp_3=1। রিকার্সিভ কল দিয়ে count আপডেট করুন।
    • arr[place][temp][set_val] = count রিটার্ন করুন।

উদাহরণ কোড

#include <bits/stdc++.h>
using namespace std;
int arr[20][20][2];
int K;

int check_val(int place, int temp, int set_val, vector<int> vec) {
    if (place == vec.size()) {
        if (temp <= K) return 1;
        return 0;
    }
    if (arr[place][temp][set_val] != -1) {
        return arr[place][temp][set_val];
    }
    int count = 0;
    int val = (set_val ? 9 : vec[place]);
    for (int i = 0; i <= val; i++) {
        int temp_2 = temp;
        if (i != 0) temp_2++;
        int temp_3 = set_val;
        if (i < vec[place]) temp_3 = 1;
        count += check_val(place + 1, temp_2, temp_3, vec);
    }
    return arr[place][temp][set_val] = count;
}

int Not_more_k(int val) {
    vector<int> vec;
    while (val) {
        vec.push_back(val % 10);
        val = val / 10;
    }
    reverse(vec.begin(), vec.end());
    memset(arr, -1, sizeof(arr));
    return check_val(0, 0, 0, vec);
}

int main() {
    int start = 50, end = 100;
    K = 2;
    int count = Not_more_k(end) - Not_more_k(start);
    cout << "Count of Numbers in Range where the number does not contain more than K non zero digits are: " << count;
    return 0;
}

উপরের কোড রান করলে নিচের আউটপুটটি পাওয়া যাবে:

আউটপুট

Count of Numbers in Range where the number does not contain more than K non zero digits are: 50
  1. C++-এ নির্দিষ্ট রেঞ্জে সবচেয়ে ছোট ফ্যাক্টর K হয় এমন সংখ্যা গণনা

  2. সি++ প্রোগ্রাম: নির্দিষ্ট অঙ্ক d ধারণকারী সংখ্যাগুলো খুঁজে বের করা

  3. সি++ প্রোগ্রাম: সংখ্যা বিভাজ্য করে এমন অঙ্কগুলোর গণনা (Count of Digits Dividing the Number)

  4. C++-এ প্রতিটি সারি থেকে একটি সংখ্যা নির্বাচন করে XOR শূন্য থেকে বড় হয় কিনা চেক করা