কম্পিউটার

একটি পরিসরে সংখ্যার গণনা যেখানে C++ তে d সংখ্যাটি ঠিক K বার হয়


আমাদেরকে একটি ভেরিয়েবল থেকে শুরু করে একটি পূর্ণসংখ্যা পরিসীমা দেওয়া হয়েছে, ধরা যাক ভেরিয়েবলের শেষ পর্যন্ত শুরু এবং একটি পরিবর্তনশীল k এবং d। কাজটি হল একটি পরিসরে d সংখ্যার গণনা করা যাতে d ঠিক k বার হয়।

উদাহরণস্বরূপ

ইনপুট - int start =10, int end =100, d =4 এবং K =2

আউটপুট - একটি পরিসরে সংখ্যার গণনা যেখানে d সংখ্যাটি ঠিক K বার হয়:1

ব্যাখ্যা - পরিসরটি 10 ​​থেকে 100 পর্যন্ত শুরু হয়। সুতরাং, ডিজিট অর্থাৎ 4 এর সাথে সম্ভাব্য সংখ্যা ঠিক k হয় অর্থাৎ 2 বার 44 এর মধ্যে তাই গণনা হল 1।

ইনপুট - int start =10, end =100, d =6 এবং m =1

আউটপুট - একটি পরিসরে সংখ্যার গণনা যেখানে d সংখ্যাটি ঠিক K বার হয়:1

ব্যাখ্যা - পরিসরটি 10 ​​থেকে 100 পর্যন্ত শুরু হয়। সুতরাং, d সংখ্যার সাথে সম্ভাব্য সংখ্যাগুলি যথা 4 হয় ঠিক k অর্থাৎ 1 সময়টি 16, 26, 36, 46, 56, 76, 86 এবং 96 এর মধ্যে তাই গণনাটি 8। আমরা করব 66 কে বিবেচনা করবেন না কারণ 6 কে k বারের বেশি ঘটছে।

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

  • ভেরিয়েবলের শুরু থেকে ভেরিয়েবল শেষ পর্যন্ত পূর্ণসংখ্যার একটি পরিসর তৈরি করুন এবং ভেরিয়েবল ডি এবং কে ঘোষণা করুন এবং মানগুলি ইনপুট করুন। আরও প্রক্রিয়াকরণের জন্য ফাংশনে ডেটা পাস করুন।
  • ভেক্টর টাইপের একটি ভেরিয়েবল তৈরি করুন, আসুন vec বলি।
  • স্টার্ট লুপ যতক্ষণ না ভ্যালু ভ্যারিয়েবল স্টার্টের ভিতরে থাকে। এখন, কিছুক্ষণের মধ্যে ভ্যাল % 10 হিসাবে মানটিকে ভেক্টরে পুশ করুন এবং val / 10 হিসাবে সেট করুন৷
  • এসটিএল-এ রিভার্স ফাংশনকে কল করুন vec.begin() এবং vec.end() এর যুক্তি হিসেবে।
  • মেমসেট ব্যবহার করে অ্যারের মানগুলি -1 হিসাবে সেট করুন।
  • সেট_টোটাল (0, 0, 0, vec) ফেরত দিন যা এমন একটি ফাংশন যা পরীক্ষা করবে যে সংখ্যাগুলি d দিয়ে জোড় অবস্থান এবং m দ্বারা বিভাজ্য কিনা
  • সেট_টোটাল ফাংশনের ভিতরে-:
    • একটি ভেক্টরের আকারের সমান IF স্থানটি পরীক্ষা করুন তারপর IF temp =k তারপর 1 দিন বা 0 দিন।
    • চেক করুন যদি arr[place][temp][val][rem] -1 এর সমান না হয় তারপর arr[place][temp][val][rem] এ মান ফেরত দিন।
    • ফলাফল সংরক্ষণ করতে একটি পরিবর্তনশীল গণনা ঘোষণা করুন।
    • একটি পরিবর্তনশীল temp_2 ঘোষণা করুন এবং এটিকে 9 IF val সমান 1 ELSE এ সেট করুন vec[place] দিয়ে।
    • temp_2 পর্যন্ত i থেকে 0 পর্যন্ত লুপ শুরু করুন এবং IF i সমান d চেক করুন তারপর চেক করুন IF d নোটটি 0 এর সমান বা d হল 0 এবং rem =1 তারপর মোট 1 দ্বারা বৃদ্ধি করুন
    • একটি ভেরিয়েবলকে temp_2 হিসাবে ঘোষণা করুন এবং এটিকে ভ্যালে সেট করুন
    • যদি আমি vec[স্থান] এর চেয়ে কম তা পরীক্ষা করুন তারপর temp_2 কে 1 হিসাবে সেট করুন
    • সেট_টোটাল ফাংশনে পুনরাবৃত্ত কলের সাথে গণনা সেট করুন
    • রিটার্ন arr[place][temp][val] =গণনা।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;

const int MAX = 20;
int arr[MAX][MAX][2][2];
int d, K;

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

   for (int i = 0; i <= temp_2; i++) {
      int total = temp;
      if (i == d) {
         if (d != 0 || (!d && rem)) {
            total++;
         }
      }
      int total_2 = val;
      if (i < vec[place]) {
         total_2 = 1;
      }
      count += set_total(place + 1, total, total_2, rem || (i != 0), vec);
   }
   return arr[place][temp][val][rem] = count;
}

int occurrence_d(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 set_total(0, 0, 0, 0, vec);
}
int main() {
   int start = 10;
   int end = 100;
   d = 4, K = 2;
   int count = occurrence_d(end) - occurrence_d(start - 1);
   cout << "Count of Numbers in a Range where digit d occurs exactly K times are: " << count;
   return 0;
}

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

উৎপন্ন করবে

আউটপুট

Count of Numbers in a Range where digit d occurs exactly K times are: 1

  1. C++ এ প্রদত্ত রেঞ্জে জোড় সংখ্যার সংখ্যার XOR

  2. C++ এ K হিসাবে ক্ষুদ্রতম ফ্যাক্টর সহ একটি পরিসরে সমস্ত সংখ্যা গণনা করুন

  3. 1 থেকে n পর্যন্ত সংখ্যাগুলি গণনা করুন যেগুলির সংখ্যা C++ এ 4 আছে

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