Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

एक श्रेणी में संख्याओं की संख्या जहां अंक d C++ में ठीक K बार आता है

हमें एक पूर्णांक श्रेणी के साथ दिया गया है जो एक चर से शुरू होता है मान लीजिए कि चर अंत तक शुरू होता है और एक चर k और d है। कार्य एक श्रेणी में d अंकों की गणना की गणना करना है जैसे कि d ठीक k बार होता है।

उदाहरण के लिए

इनपुट - इंट स्टार्ट =10, इंट एंड =100, डी =4 और के =2

आउटपुट - एक श्रेणी में संख्याओं की संख्या जहां अंक d ठीक K बार आता है:1

स्पष्टीकरण - रेंज 10 से 100 तक शुरू हो रही है। तो, अंक d यानी 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 बार से अधिक घटित हो रहा है।

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

  • वेरिएबल शुरू से लेकर वेरिएबल के अंत तक पूर्णांक संख्याओं की एक श्रृंखला बनाएं और वेरिएबल d और k घोषित करें और मानों को इनपुट करें। आगे की प्रक्रिया के लिए डेटा को फ़ंक्शन में पास करें।
  • वेरिएबल प्रकार का वेक्टर बनाएं मान लें vec.
  • लूप को तब तक शुरू करें जब तक कि वेरिएबल स्टार्ट के अंदर का वैल्यू वैल्यू न हो जाए। अब, थोड़ी देर के अंदर मान को वैल% 10 के रूप में वेक्टर पर धकेलें और वैल को वैल / 10 के रूप में सेट करें।
  • vec.begin() और vec.end() को तर्क के रूप में पास करके STL में रिवर्स फ़ंक्शन को कॉल करें।
  • मेमसेट का उपयोग करके सरणी में मानों को -1 के रूप में सेट करें।
  • सेट_टोटल(0, 0, 0, vec) लौटाएं जो एक ऐसा फंक्शन है जो यह जांच करेगा कि क्या सम स्थिति d वाली संख्याएं और m से विभाज्य हैं
  • सेट_टोटल फ़ंक्शन के अंदर-:
    • चेक करें कि क्या स्थान वेक्टर के आकार के बराबर है, फिर जांचें कि IF temp =k फिर 1 लौटाएं या 0 लौटाएं।
    • जांचें अगर गिरफ्तारी [स्थान] [अस्थायी] [वैल] [रेम] -1 के बराबर नहीं है तो एआर [स्थान] [अस्थायी] [वैल] [रेम] पर मान लौटाएं।
    • परिणाम संग्रहीत करने के लिए एक चर गणना घोषित करें।
    • एक चर temp_2 घोषित करें और इसे 9 पर सेट करें यदि वैल 1 के बराबर है ELSE इसे vec[place] के साथ सेट करें।
    • I से 0 तक के लिए लूप शुरू करें temp_2 तक और जांचें कि क्या मैं d के बराबर हूं, फिर जांचें कि क्या d नोट 0 के बराबर है या d 0 है और रेम =1 है, फिर कुल 1 से बढ़ाएं
    • वेरिएबल को temp_2 घोषित करें और इसे वैल पर सेट करें
    • जांचें कि क्या मैं vec[place] से कम हूं, फिर temp_2 को 1 के रूप में सेट करें
    • पुनरावर्ती कॉल के साथ फंक्शन सेट_टोटल पर गिनती सेट करें
    • रिटर्न एआर [स्थान] [अस्थायी] [वैल] =गिनती।

उदाहरण

#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++ में K के रूप में सबसे छोटे कारक वाले श्रेणी में सभी संख्याओं की गणना करें

    इस ट्यूटोरियल में, हम K के रूप में सबसे छोटे कारक के साथ एक श्रेणी में संख्याओं को खोजने के लिए एक प्रोग्राम पर चर्चा करेंगे। इसके लिए हमें एक रेंज [ए, बी] प्रदान की जाएगी। हमारा काम दी गई श्रेणी में उन संख्याओं को गिनना है जिनका सबसे छोटा गुणनखंड K है। उदाहरण #include <bits/stdc++.h> using n

  1. 1 से n तक की संख्याओं की गणना करें जिनमें C++ में एक अंक के रूप में 4 हों

    इस ट्यूटोरियल में, हम 1 से n तक की संख्याओं को खोजने के लिए एक प्रोग्राम पर चर्चा करेंगे, जिसमें 4 अंक होंगे। इसके लिए हमें एक नंबर n प्रदान किया जाएगा। हमारा काम उन सभी नंबरों को गिनना है जिनमें 4 अंकों में से एक है और उसका प्रिंट आउट लेना है। उदाहरण #include<iostream> using namespace std; b

  1. C++ में एक अंक के रूप में 0 के साथ 'd' अंक धनात्मक पूर्णांकों की गणना करें

    इस ट्यूटोरियल में, हम एक प्रोग्राम के बारे में चर्चा करेंगे जिसमें डी अंक वाले अंक 0 के साथ एक अंक के रूप में मिलते हैं। इसके लिए हमें एक नंबर d दिया जाएगा। हमारा कार्य d अंक वाले धनात्मक पूर्णांकों की संख्या और उनके अंक के रूप में 0 को गिनना और प्रिंट करना है। उदाहरण #include<bits/stdc++.h>