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

C++ में उन प्राकृतिक संख्याओं की गिनती जिनके सभी क्रमपरिवर्तन (permutations) उस संख्या से बड़े या बराबर हैं


समस्या विवरण

हमें एक प्राकृतिक संख्या num दी गई है। उन सभी प्राकृतिक संख्याओं की गिनती करनी है जिनके सभी संभावित क्रमपरिवर्तन (permutations) दिए गए संख्या num से बड़े या बराबर हैं।

शर्तें

  • केवल प्राकृतिक संख्याएं मान्य हैं।
  • संख्या के सभी संभावित क्रमपरिवर्तन दिए गए संख्या से बड़े या बराबर होने चाहिए।

उदाहरण

इनपुट: num = 10

आउटपुट: 9

व्याख्या: 1 से 9 तक की संख्याओं के क्रमपरिवर्तन स्वयं के बराबर होते हैं।

इनपुट: num = 13

आउटपुट: 12

व्याख्या: 1-9, 11, 12 (21>13), 13 (31>13) मान्य हैं।

समाधान दृष्टिकोण

  1. अधिकतम आकार 9 सेट करें (कम से कम 9 एक-अंकीय संख्याएं हमेशा मान्य होती हैं)।
  2. 1 से 9 तक लूप चलाएं, प्रत्येक को सूची में जोड़ें यदि ≤ num।
  3. सूची के अंत से शुरुआत तक पार करें, प्रत्येक तत्व के लिए अगला अंक (अंतिम अंक से 9 तक) जोड़कर नई संख्या बनाएं।
  4. यदि नई संख्या ≤ num, तो सूची के सामने जोड़ें और गिनती बढ़ाएं।

कार्यकारी प्रोग्राम

#include <bits/stdc++.h>
using namespace std;

void countValidNumbers(int num) {
    int count = 0;
    int max_size = 9;
    for (int i = 1; i <= max_size; i++) {
        list<int> lists;
        if (i <= num) {
            lists.push_back(i);
            count++;
        }
        for (auto iter = lists.end(); iter != lists.begin(); ) {
            --iter;
            int first_ele = *iter;
            lists.erase(iter);
            for (int next = first_ele % 10; next <= 9; next++) {
                int temp = first_ele * 10 + next;
                if (temp <= num) {
                    lists.push_front(temp);
                    count++;
                }
            }
        }
    }
    cout << "num " << num << " के लिए गिनती: " << count << endl;
}

int main() {
    countValidNumbers(1);
    countValidNumbers(9);
    countValidNumbers(7);
    countValidNumbers(0);
    countValidNumbers(12);
    return 0;
}

आउटपुट

num 1 के लिए गिनती: 1
num 9 के लिए गिनती: 9
num 7 के लिए गिनती: 7
num 0 के लिए गिनती: 0
num 12 के लिए गिनती: 11
  1. - C++ में 10^6 से कम उन सभी संख्याओं की गिनती करें जिनका न्यूनतम अभाज्य गुणनखंड N है

    हमें एक अभाज्य संख्या दी गई है, मान लीजिए num और कार्य 10^6 से कम उन सभी संख्याओं की संख्या की गणना करना है जिनका न्यूनतम अभाज्य गुणनखंड num के बराबर है। उदाहरण के लिए इनपुट - num = 7 आउटपुट - अभाज्य गुणनखंडों की संख्या = 38095 इनपुट - num = 3 आउटपुट - अभाज्य गुणनखंडों की संख्या = 16666 नीचे दिए

  1. - C++ में दी गई संख्या से सख्ती से छोटी संख्या प्रिंट करना जिसके सभी डिजिट अलग हों

    इस समस्या में, हमें एक संख्या n दी गई है। हमारा कार्य n से छोटी सबसे बड़ी संख्या प्रिंट करना है जिसके सभी डिजिट अलग-अलग हों। उदाहरण Input: n = 2332 Output: 2319 इस समस्या को हल करने के लिए, हम संख्याओं की रिवर्स काउंटिंग करेंगे यानी n से 0 तक। और अलग-अलग डिजिट वाली संख्या की जांच करेंगे। यदि व

  1. - C++ में N से कम या बराबर सभी अभाज्य संख्याएं प्रिंट करें

    इस समस्या में, हमें एक संख्या N दी गई है और हमें N से कम या बराबर सभी अभाज्य संख्याओं को प्रिंट करना है। विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं - इनपुट: 10 आउटपुट: 2 3 5 7 एक अभाज्य संख्या वह संख्या है जिसे केवल एक और स्वयं संख्या से विभाजित किया जा सकता है। उदाहरण: 2, 3। एक सरल दृष्टि