हमें एक पूर्णांक श्रेणी के साथ दिया जाता है, एक चर 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