Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में अधिकतम 'd' अंकों वाली उन धनात्मक पूर्णांकों की गिनती जिनमें 0 अंक हो


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

सबसे पहले हम उन संख्याओं की गिनती ज्ञात करेंगे जिनमें d अंक हों और कम से कम एक 0 हो। मान लीजिए d=3। कम से कम एक 0 वाली 3-अंकीय संख्या बनाने के संभावित तरीके हैं:

C++ में अधिकतम  d  अंकों वाली उन धनात्मक पूर्णांकों की गिनती जिनमें 0 अंक हो

यहाँ 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
  1. - C++ में बिटवाइज़ AND से 0 को X में बदलने के अधिकतम चरण

    इस समस्या में, हमें एक पूर्णांक X दिया गया है। हमारा कार्य 0 से X में बदलने में लगे कुल चरणों की संख्या ज्ञात करना है।मान्य परिवर्तन - एक चरण तब गिना जाता है जब A से B में एक परिवर्तन होता है। परिवर्तन होने की शर्त है A != B और A & B = A (& बिटवाइज़ AND है)। तो, 1 चरण A से B में परिवर्तन है

  1. - C++ में रेंज [A, B] में C से विभाज्य अधिकतम धनात्मक पूर्णांक

    यहां हम एक दिलचस्प समस्या देखेंगे। मान लीजिए हमारे पास तीन पूर्णांक A, B, और C हैं। हमें एक न्यूनतम पूर्णांक X ढूंढना है, जैसे कि X mod C = 0, और X रेंज [A, B] में नहीं है। यदि A, B और C के मान 5, 10 और 4 हैं, तो X का मान 4 होगा। समाधान प्राप्त करने के चरण: चरण − यदि C रेंज [A, B] में नहीं है

  1. - C++ में दिए गए उत्पाद के साथ N पूर्णांकों का अधिकतम GCD

    मान लीजिए हमारे पास दो पूर्णांक N और P हैं। P, N अज्ञात पूर्णांकों का उत्पाद है। हमें उन पूर्णांकों के अधिकतम संभव GCD को ढूंढना है। मान लीजिए N = 3, और P = 24, तो अलग-अलग समूह होंगे जैसे {1, 1, 24}, {1, 2, 12}, {1, 3, 8}, {1, 4, 6}, {2, 2, 6}, {2, 3, 4}। GCD हैं: 1, 1, 1, 1, 2, 1। तो उत्तर यहां 2 ह