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

C++ में m से विभाज्य और सम स्थिति में अंक d वाली रेंज में संख्याओं की गिनती


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

उदाहरण के लिए

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

आउटपुट - m से विभाज्य और सम स्थिति में अंक d वाली रेंज में संख्याओं की गिनती: 2

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

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

आउटपुट - m से विभाज्य और सम स्थिति में अंक d वाली रेंज में संख्याओं की गिनती: 8

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

नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण

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

उदाहरण

#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. - C++ में दी गई रेंज में फाइबोनैचि संख्याओं की गिनती O(Log n) समय और O(1) स्पेस में

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

  1. - C++ में दी गई रेंज में फैक्टोरियल संख्याओं की गिनती करें

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

  1. - C++ में संख्या रेंज का बिटवाइज़ AND

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