কম্পিউটার

পরিসরে সংখ্যা গণনা


ধরুন আমাদের 0 এবং 9 এর মধ্যে একটি পূর্ণসংখ্যা d আছে, আমাদের কাছে যথাক্রমে নিম্ন এবং উচ্চ সীমা হিসাবে দুটি ধনাত্মক পূর্ণসংখ্যা রয়েছে। নিম্ন এবং উচ্চ সীমানা সহ, নিম্ন এবং উচ্চের মধ্যে সমস্ত পূর্ণসংখ্যাতে d সংখ্যা হিসাবে কতবার ঘটে তা আমাদের খুঁজে বের করতে হবে।

সুতরাং, যদি ইনপুটটি d =1, নিম্ন =1, উচ্চ =13 এর মত হয়, তাহলে আউটপুট হবে 6, কারণ d=1 সংখ্যাটি 1,10,11,12,13 এর মত 6 বার হয়।

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

একটি ফাংশন শূন্য(), এটি n,

লাগবে
  • ret :=0, x :=0

  • যদি n 0 এর সমান হয়, তাহলে −

    • রিটার্ন 1

  • শুরু করার জন্য m :=1, যখন m <=n, আপডেট m :=m * 10, do −

    • a :=n / m

    • b :=n mod m

    • z :=a mod 10

    • যদি m-এ অঙ্কের সংখ্যা n-এ অঙ্কের সংখ্যার সমান হয়, তাহলে −

      • লুপ থেকে বেরিয়ে আসুন

    • যদি z> x, তাহলে −

      • ret :=ret + ((a / 10) + 1)

    • অন্যথায় যখন z x এর মতো হয়, তখন

      • ret :=ret + ((a / 10) * m + (b + 1))

    • অন্যথায়

      • ret :=ret + (a / 10)

  • রিটার্ন রিটার্ন

  • একটি ফাংশন সংজ্ঞায়িত করুন f(), এটি x, n,

    লাগবে
  • ret :=0

  • শুরু করার জন্য m :=1, যখন m <=n, আপডেট m :=m * 10, do −

    • a :=n / m

    • b :=n mod m

    • z :=a mod 10

    • যদি z> x, তাহলে

      • ret :=ret + ((a / 10) + 1)

    • অন্যথায় যখন z x এর মত হয়, তখন −

      • ret :=ret + ((a / 10) * m + (b + 1))

    • অন্যথায়

      • ret :=ret + (a / 10)

    • যদি x 0 এর সমান হয়, তাহলে −

      • ret :=ret - m

  • রিটার্ন রিটার্ন

  • মূল পদ্ধতি থেকে নিম্নলিখিতগুলি করুন

  • রিটার্ন রিটার্ন

  • ফেরত f(d, high - f(d, low - 1))

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

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int digitCount(int x){
      int ret = 0;
      while (x) {
         ret++;
         x /= 10;
      }
      return ret;
   }
   int zero(int n){
      int ret = 0;
      int x = 0;
      if (n == 0)
      return 1;
      for (int m = 1; m <= n; m *= 10) {
         int a = n / m;
         int b = n % m;
         int z = a % 10;
         if (digitCount(m) == digitCount(n))
         break;
         if (z > x) {
            ret += ((a / 10) + 1) * m;
         } 
         else if (z == x) {
            ret += (a / 10) * m + (b + 1);
         } else {
            ret += (a / 10) * m;
         }
         cout << ret << endl;
      }
      return ret;
   }
   int f(int x, int n){
      int ret = 0;
      for (int m = 1; m <= n; m *= 10) {
         int a = n / m;
         int b = n % m;
         int z = a % 10;
         if (z > x) {
            ret += ((a / 10) + 1) * m;
         }
         else if (z == x) {
            ret += (a / 10) * m + (b + 1);
         } else {
            ret += (a / 10) * m;
         }
         if (x == 0) {
            ret -= m;
         }
      }
      return ret;
   }
   int digitsCount(int d, int low, int high){
      return f(d, high) - f(d, low - 1);
   }
};
main(){
   Solution ob;
   cout << (ob.digitsCount(1,1,13));
}

ইনপুট

1,1,13

আউটপুট

6

  1. C++ এ একটি প্রদত্ত পরিসরে ফ্যাক্টরিয়াল সংখ্যা গণনা করুন

  2. C++ এ একটি সংখ্যা হিসাবে 0 সহ 'd' সংখ্যার ধনাত্মক পূর্ণসংখ্যা গণনা করুন

  3. পাইথন কাউন্ট একটি পরিসরে বিট সেট?

  4. একটি পরিসরে আনসেট বিট গণনা করার জন্য পাইথন প্রোগ্রাম।