हमें एक संख्या d दी गई है जो अंकों की संख्या को दर्शाती है। लक्ष्य 0 के साथ एक अंक के रूप में सकारात्मक पूर्णांकों की गिनती का पता लगाना है और अधिकतम डी अंक हैं। सभी 1 अंक, 2 अंक, 3 अंक… .d अंक सकारात्मक संख्याओं की गणना करें जिनमें कम से कम एक 0 हो।
हम सबसे पहले उन संख्याओं की संख्या ज्ञात करेंगे जिनमें कम से कम एक 0 के साथ d अंक हैं। मान लें कि d=3 है। कम से कम एक 0 वाली 3-अंकीय संख्या बनाने के संभावित तरीके हैं -
Here d1 can have 1 to 9 : 9 ways d2 can have 0-9 : 10 ways d3 can have 0-9 : 10 ways Total numbers possible: 9 x 10 x 10 = 9 x 102 For d digits, count of numbers: 9 x 10d-1 For d digits, numbers without any 0 are : 9d Total numbers having d digits with at least one 0 = 9 x 10d-1 - 9d = 9 x ( 10d-1 - 9d-1 )
आइए उदाहरणों के साथ समझते हैं
इनपुट - डी=4
आउटपुट - एक अंक के रूप में 0 और अधिकतम 'डी' अंक वाले धनात्मक पूर्णांकों की संख्या है - 2619
स्पष्टीकरण − कम से कम एक 0 के साथ x अंकों की संख्या −
1 digit numbers : 0 2 digit numbers : 9 3 digit numbers : 171 4 digit numbers: 2439 Total= 9+171+2439 = 2619
इनपुट - d=1
आउटपुट - एक अंक के रूप में 0 और अधिकतम 'डी' अंक वाले धनात्मक पूर्णांकों की संख्या है - 0
स्पष्टीकरण − 1 से 9 तक किसी भी संख्या में अंक के रूप में 0 नहीं होता है।
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
हम दो दृष्टिकोणों का उपयोग करेंगे। लूप के लिए a का उपयोग करके पहला अनुभवहीन दृष्टिकोण। 1 अंक से d अंक तक चलना शुरू करें और ऊपर वर्णित सूत्र का उपयोग करके संख्याओं की गणना करें। गिनने के लिए लौटाया गया मान जोड़ें।
-
अंकों के लिए पूर्णांक d लें।
-
फंक्शन Total_count(int d)) कई अंक d लेता है और d अंकों के साथ कम से कम एक 0 वाले अंकों की संख्या देता है।
-
ऐसी संख्याओं की गणना करें जैसे temp=9*(pow(10,d-1) - pow(9,d-1));
-
वापसी अस्थायी।
-
फ़ंक्शन max_d(int d) d अंकों की अधिकतम संख्या लेता है और कम से कम एक 0 वाले d अंकों तक की संख्या देता है।
-
1 अंकों की संख्या से शुरू होकर 2 और इसी तरह d तक लूप का उपयोग करके ट्रैवर्स करें।
-
प्रत्येक d के लिए कुल संख्या (i) के रूप में संख्याओं की गणना करें। इसे गिनने के लिए जोड़ें।
-
अंत में हमें कुल गिनती मिल जाएगी।
-
परिणाम के रूप में वापसी की गिनती।
कुशल दृष्टिकोण
इस दृष्टिकोण में, हम उपरोक्त गणनाओं के लिए गठित G.P को देखकर गणना की गणना करेंगे।
Solution is 9 x (10d-1 - 9d-1) = 9 x (10d - 1)- 9 x (9d-1) = 9 x (10i - 1) - 9 x (9i - 1) ( 1<=i<=d ) = g.p 1 - g.p 2 = 9x(10d-1)/(10-1) - 9x(9d-1)/(9-1) = (10d-1)- (9/8)*(9d-1)
-
d को अंकों की अधिकतम संख्या के रूप में लें।
-
फ़ंक्शन max_d(int d) अंकों की अधिकतम संख्या d लेता है और कम से कम एक 0 वाले d अंकों तक की संख्या देता है।
-
उपरोक्त सूत्र का उपयोग करके temp_1 की गणना 9*((pow(10,d)-1)/9) के रूप में करें।
-
temp_2 की गणना 9*((pow(9,d)-1)/8) के रूप में करें।
-
गिनती सेट करें =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