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

एक श्रेणी में संख्याओं की संख्या जो m से विभाज्य है और अंक d C++ में सम स्थिति में है

हमें एक पूर्णांक श्रेणी के साथ दिया जाता है, एक चर m जो भाजक के रूप में उपयोग किया जाता है और एक चर d जिसका उपयोग यह जांचने के लिए किया जाता है कि अंक 'd' सम स्थिति में है या नहीं और कार्य उन संख्याओं की गणना करना है श्रेणी जो चर m से विभाज्य हैं और जिनका अंक d सम स्थिति में है।

उदाहरण के लिए

इनपुट - int start =20, end =50, d =8 और m =4

आउटपुट - एक श्रेणी में संख्याओं की संख्या जो m से विभाज्य है और अंक d सम स्थिति में हैं:2

स्पष्टीकरण - रेंज 20 से 50 तक शुरू हो रही है। तो अंक d यानी 8 के साथ संभावित संख्याएं 28, 38 और 48 हैं, जिनमें 8 सम स्थिति यानी 2 पर हैं और संख्या 24 और 48 मी से विभाज्य हैं, इसलिए गिनती 2 है।

इनपुट - int start =10, end =100, d =6 और m =2

आउटपुट - एक श्रेणी में संख्याओं की संख्या जो m से विभाज्य है और अंक d सम स्थिति में हैं:8

स्पष्टीकरण - श्रेणी 10 से 100 तक शुरू हो रही है। तो अंक d के साथ संभावित संख्याएं यानी 6, 16, 26, 36, 46, 56, 66, 76, 86 और 96 में 6 और 66 को छोड़कर, जो कि संख्या 6 पर हैं विषम स्थिति इसलिए हम इसे शामिल नहीं करेंगे और अब हम सूची से उन संख्याओं की जाँच करेंगे जो 2 से विभाज्य हैं इसलिए सभी संख्याएँ यानी 16, 26, 36, 46, 56, 76, 86 और 96 2 से विभाज्य हैं इसलिए गिनती 8 है।

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

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

उदाहरण

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

int arr[20][20][2];
int d, m;

int set_total(int place, int temp, int val, vector < int > vec) {
   if (place == vec.size()) {
      if (temp == 0) {
         return 1;
      }
      return 0;
   }
   if (arr[place][temp][val] != -1) {
      return arr[place][temp][val];
   }
   if (place % 2) {
      if (val == 0) {
         if (d > vec[place]) {
            return 0;
         }
      }
      int temp_2 = val;
      if (d < vec[place]) {
         temp_2 = 1;
      }
      int temp_3 = set_total(place + 1, (10 * temp + d) % m, temp_2, vec);
      return arr[place][temp][val] = temp_3;
   }
   int count = 0;
   int set_limit = (val ? 9 : vec[place]);
   for (int i = 0; i <= set_limit; i++) {
      if (i == d) {
         continue;
      }
      int temp_2 = val;
      if (i < vec[place]) {
         temp_2 = 1;
      }
      count += set_total(place + 1, (10 * temp + i) % m, temp_2, vec);
   }
   return arr[place][temp][val] = count;
}

int divisible(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, vec);
}
int main() {
   int start = 20, end = 50;
   d = 8, m = 4;
   int count = divisible(end) - divisible(start);
   cout << "Count of Numbers in a Range divisible by m and having digit d in even positions are: " << count;
   return 0;
}

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

आउटपुट

Count of Numbers in a Range divisible by m and having digit d in even positions are: 2

  1. ओ (लॉग एन) समय में दी गई सीमा में फाइबोनैचि संख्याओं की गणना करें और सी ++ में ओ (1) स्थान की गणना करें

    हमें प्रारंभ और अंत संख्या वाली श्रेणी दी गई है और कार्य ओ (लॉग एन) समय और ओ (1) स्थान में दी गई सीमा के बीच उपलब्ध फाइबोनैचि संख्याओं की कुल गणना की गणना करना है। फाइबोनैचि संख्याएं क्या हैं फाइबोनैचि संख्याएं संख्याओं का वह क्रम है जिसे फाइबोनैचि अनुक्रम के रूप में जाना जाता है जहां प्रत्येक नई स

  1. C++ में दी गई श्रेणी में भाज्य संख्याओं की गणना करें

    हमें एक चर द्वारा धारित पूर्णांक मान से शुरू होने वाली श्रेणी दी गई है, मान लीजिए कि चर अंत तक शुरू होता है और कार्य दी गई सीमा में उपलब्ध भाज्य संख्याओं की कुल संख्या की गणना करना है। फैक्टोरियल नंबर क्या है किसी संख्या के भाज्य की गणना अंकों के अंकों को 1 से घटाते हुए अंकों को गुणा करके की जाती ह

  1. C++ में बिटवाइज़ और नंबर रेंज की रेंज

    मान लीजिए कि हमारे पास एक रेंज [m, n] है जहां 0 <=m <=n <=2147483647. हमें बिटवाइज और इस रेंज की सभी संख्याओं को शामिल करना है। तो अगर रेंज [5, 7] है, तो परिणाम 4 होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - मैं :=0 जबकि m, n नहीं है, तब एम:=एम/2, एन:=एन/2, मैं 1 से बढ़ाएँ म