हमें एक संख्या d दी गई है जो अंकों की संख्या दर्शाती है। लक्ष्य उन धनात्मक पूर्णांकों की संख्या ज्ञात करना है जिनमें 0 अंक हो और जिनमें अधिकतम d अंक हों। 1 अंक, 2 अंक, 3 अंक... d अंक वाली उन सभी धनात्मक संख्याओं की गिनती करें जिनमें कम से कम एक 0 हो।
सबसे पहले हम उन संख्याओं की गिनती ज्ञात करेंगे जिनमें d अंक हों और कम से कम एक 0 हो। मान लीजिए d=3। कम से कम एक 0 वाली 3-अंकीय संख्या बनाने के संभावित तरीके हैं:

यहाँ d1 में 1 से 9 तक: 9 तरीके d2 में 0-9 तक: 10 तरीके d3 में 0-9 तक: 10 तरीके कुल संभावित संख्याएँ: 9 × 10 × 10 = 9 × 10² d अंकों के लिए, संख्याओं की गिनती: 9 × 10^(d-1) d अंकों के लिए, बिना किसी 0 वाली संख्याएँ: 9^d कम से कम एक 0 वाली d-अंकीय संख्याओं का कुल योग = 9 × 10^(d-1) - 9^d = 9 × (10^(d-1) - 9^(d-1))
उदाहरण सहित समझ
इनपुट - d=4
आउटपुट - अधिकतम 'd' अंकों वाली उन धनात्मक पूर्णांकों की संख्या जिनमें 0 अंक हो: 2619
व्याख्या - कम से कम एक 0 वाली x अंकों की संख्याएँ:
1 अंक वाली संख्याएँ: 0 2 अंक वाली संख्याएँ: 9 3 अंक वाली संख्याएँ: 171 4 अंक वाली संख्याएँ: 2439 कुल = 9 + 171 + 2439 = 2619
इनपुट - d=1
आउटपुट - अधिकतम 'd' अंकों वाली उन धनात्मक पूर्णांकों की संख्या जिनमें 0 अंक हो: 0
व्याख्या - 1 से 9 तक कोई संख्या 0 अंक नहीं रखती।
प्रोग्राम में उपयोग किया गया दृष्टिकोण
सामान्य दृष्टिकोण (Naive Approach)
हम दो दृष्टिकोणों का उपयोग करेंगे। पहला सामान्य दृष्टिकोण एक फॉर लूप का उपयोग करता है। 1 अंक से d अंक तक ट्रैवर्स करें और उपरोक्त सूत्र का उपयोग करके संख्याओं की गणना करें। लौटाए गए मान को काउंट में जोड़ें।
- अंकों के लिए पूर्णांक
dलें। - फंक्शन
total_count(int d)अंकों की संख्याdलेता है और कम से कम एक 0 वालीdअंकों की संख्याओं की गिनती लौटाता है। - ऐसी संख्याओं की गणना करें:
temp = 9 * (pow(10, d-1) - pow(9, d-1))। tempलौटाएँ।- फंक्शन
maximum_d(int d)अधिकतम अंकों की संख्याdलेता है औरdअंकों तक कम से कम एक 0 वाली संख्याओं की गिनती लौटाता है। - 1 अंक की संख्याओं से शुरू करके लूप का उपयोग करके ट्रैवर्स करें, फिर 2 और इसी तरह
dतक। - प्रत्येक
dके लिए संख्याओं की गणनाtotal_count(i)के रूप में करें। इसे काउंट में जोड़ें। - अंत में कुल गिनती प्राप्त होगी।
- परिणाम के रूप में काउंट लौटाएँ।
कुशल दृष्टिकोण (Efficient Approach)
इस दृष्टिकोण में, हम उपरोक्त गणनाओं के लिए बने G.P. (ज्यामितीय श्रेणी) को देखकर गिनती की गणना करेंगे।
हल है: 9 × (10^(d-1) - 9^(d-1)) = 9 × (10^d - 1) - 9 × (9^d - 1) = 9 × (10^i - 1) - 9 × (9^i - 1) (1 ≤ i ≤ d) = G.P.¹ - G.P.² = 9×(10^d-1)/(10-1) - 9×(9^d-1)/(9-1) = (10^d - 1) - (9/8)×(9^d - 1)
- अधिकतम अंकों की संख्या के रूप में
dलें। - फंक्शन
maximum_d(int d)अधिकतम अंकों की संख्याdलेता है औरdअंकों तक कम से कम एक 0 वाली संख्याओं की गिनती लौटाता है। - उपरोक्त सूत्र का उपयोग करके
temp_1की गणना करें:9 * ((pow(10, d) - 1) / 9)। temp_2की गणना करें:9 * ((pow(9, d) - 1) / 8)।count = temp_1 - temp_2सेट करें।- परिणाम के रूप में काउंट लौटाएँ।
उदाहरण (सामान्य दृष्टिकोण)
#include <bits/stdc++.h>
using namespace std;
int total_count(int d) {
int temp = 9 * (pow(10, d-1) - pow(9, d-1));
return temp;
}
int maximum_d(int d) {
int count = 0;
for (int i = 1; i <= d; i++) {
count = count + total_count(i);
}
return count;
}
int main() {
int d = 5;
cout << "Count of positive integers with 0 as a digit and maximum 'd' digits are: " << maximum_d(d) << endl;
return 0;
}
आउटपुट
Count of positive integers with 0 as a digit and maximum 'd' digits are: 33570
उदाहरण (कुशल दृष्टिकोण)
#include <bits/stdc++.h>
using namespace std;
int maximum_d(int d) {
int temp_1 = 9 * ((pow(10, d) - 1) / 9);
int temp_2 = 9 * ((pow(9, d) - 1) / 8);
int count = temp_1 - temp_2;
return count;
}
int main() {
int d = 4;
cout << "Count of positive integers with 0 as a digit and maximum 'd' digits are: " << maximum_d(d) << endl;
return 0;
}
आउटपुट
Count of positive integers with 0 as a digit and maximum 'd' digits are: 2619