हमें एक पूर्णांक श्रेणी के साथ दिया गया है जो एक चर से शुरू होता है मान लीजिए कि चर अंत तक शुरू होता है और एक चर 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