हमें वेरिएबल से शुरू होने वाली एक पूर्णांक श्रेणी दी गई है, मान लीजिए कि वेरिएबल अंत तक शुरू करें और एक वैरिएबल k है और कार्य रेंज में संख्याओं की गणना करना है जैसे कि संख्याओं में 'k' गैर-शून्य से अधिक नहीं है अंक।
उदाहरण के लिए
इनपुट - इंट स्टार्ट =50, एंड =100 और के =2;
आउटपुट - श्रेणी में संख्याओं की संख्या जहाँ संख्या में K से अधिक गैर-शून्य अंक नहीं होते हैं:50
स्पष्टीकरण - रेंज 50 से 100 तक शुरू हो रही है और हमें k 2 के रूप में दिया गया है। जैसा कि हम देख सकते हैं, 50 और 100 के बीच की सभी संख्याओं में 2-अंकीय संख्याएँ होती हैं, जिससे संख्या 100 को छोड़कर 2 से अधिक शून्य अंकों को समाहित करना असंभव हो जाता है। एक 3-अंकीय संख्या लेकिन इसमें 2 शून्य भी होंगे जो इससे अधिक नहीं होंगे इसलिए गिनती 50 है।
इनपुट - इंट स्टार्ट =50, एंड =100 और के =1;
आउटपुट - श्रेणी में संख्याओं की संख्या जहाँ संख्या में K से अधिक शून्य न हो
अंक हैं:5
स्पष्टीकरण - रेंज 50 से 100 तक शुरू हो रही है और हमें 1 के रूप में k दिया गया है। जैसा कि हम देख सकते हैं, 50 और 100 के बीच की सभी संख्याओं में 2-अंकीय संख्याएँ होती हैं, इसलिए 1 या k से अधिक गैर-शून्य अंकों वाली संख्याएँ 50 होती हैं। , 60, 70, 80 और 90 इसलिए गिनती 5 है।
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
- वेरिएबल प्रारंभ से लेकर वैरिएबल अंत तक पूर्णांक संख्याओं की एक श्रेणी बनाएं और k घोषित करें और मान इनपुट करें। आगे की प्रक्रिया के लिए डेटा को फ़ंक्शन में पास करें।
- वेरिएबल प्रकार का वेक्टर बनाएं मान लें vec.
- लूप को तब तक शुरू करें जब तक कि वेरिएबल स्टार्ट के अंदर का वैल्यू वैल्यू न हो जाए। अब, थोड़ी देर के अंदर मान को वैल% 10 के रूप में वेक्टर पर धकेलें और वैल को वैल / 10 के रूप में सेट करें।
- vec.begin() और vec.end() को तर्क के रूप में पास करके STL में रिवर्स फ़ंक्शन को कॉल करें।
- मेमसेट का उपयोग करके सरणी में मानों को -1 के रूप में सेट करें।
- check_val(0, 0, 0, vec) लौटाएं जो एक ऐसा फ़ंक्शन है जो यह जांच करेगा कि अंक गैर-शून्य हैं या नहीं।
- check_val फ़ंक्शन के अंदर-:
- जांचें कि क्या स्थान सदिश के आकार के बराबर है, फिर IF अस्थायी जांचें <=k फिर 1 लौटाएं या 0 लौटाएं।
- अगर गिरफ्तारी की जाँच करें [स्थान] [अस्थायी] [सेट_वल] -1 के बराबर नहीं है तो एआर [स्थान] [अस्थायी] [सेट_वल] पर मान लौटाएं।
- परिणाम को संग्रहीत करने के लिए चर घोषित करें और इसे 0 पर सेट करें।
- एक चर वैल घोषित करें और इसे 9 पर सेट करें यदि set_val बराबर 1 ELSE इसे i++ पर सेट करें
- 0 से मान वैल तक के लिए लूप प्रारंभ करें
- लूप के अंदर temp_2 को अस्थायी के रूप में सेट करें और जांचें कि IF 1 बराबर 0 नहीं है, तो temp_2 के मान को 1 से बढ़ाएँ और temp_3 को set_val के रूप में सेट करें और i को vec [place] से कम जांचें और फिर temp_3 को 1 के रूप में सेट करें
- गिनती के मान को पुनरावर्ती कॉल के रूप में फ़ंक्शन check_val(place + 1, temp_2, temp_3, vec) पर सेट करें
- वापसी गिरफ्तारी [स्थान] [अस्थायी] [set_val] गिनती के बराबर है।
उदाहरण
#include <bits/stdc++.h> using namespace std; int arr[20][20][2]; int K; int check_val(int place, int temp, int set_val, vector < int > vec) { if (place == vec.size()) { if (temp <= K) { return 1; } return 0; } if (arr[place][temp][set_val] != -1) { return arr[place][temp][set_val]; } int count = 0; int val = (set_val ? 9 : vec[place]); for (int i = 0; i <= val; i++) { int temp_2 = temp; if (i != 0) { temp_2++; } int temp_3 = set_val; if (i < vec[place]) { temp_3 = 1; } count += check_val(place + 1, temp_2, temp_3, vec); } return arr[place][temp][set_val] = count; } int Not_more_k(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 check_val(0, 0, 0, vec); } int main() { int start = 50, end = 100; K = 2; int count = Not_more_k(end) - Not_more_k(start); cout << "Count of Numbers in Range where the number does not contain more than K non zero digits are: " << count; return 0; }
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
आउटपुट
Count of Numbers in Range where the number does not contain more than K non zero digits are: 50