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

रेंज में डिजिट काउंट

मान लीजिए हमारे पास 0 और 9 के बीच एक पूर्णांक d है, हमारे पास दो पॉजिटिव इंटीजर्स low और high भी हैं जो निचली और ऊपरी सीमाएं हैं। हमें उन सभी पूर्णांकों में d के एक अंक के रूप में घटित होने की संख्या ज्ञात करनी है जो low और high के बीच हैं, सीमाओं low और high को शामिल करते हुए।

तो, यदि इनपुट d = 1, low = 1, high = 13 है, तो आउटपुट 6 होगा, क्योंकि अंक d=1 6 बार होता है जैसे 1, 10, 11, 12, 13।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:

एक फ़ंक्शन zero() परिभाषित करें, जो n लेगा,

  • ret := 0, x := 0

  • यदि n, 0 के समान है, तो:

    • 1 लौटाएं

  • m := 1 से शुरू करें, जब m <= n, अपडेट करें m := m * 10, करें:

    • a := n / m

    • b := n mod m

    • z := a mod 10

    • यदि m में अंकों की संख्या, n में अंकों की संख्या के समान है, तो:

      • लूप से बाहर आएं

    • यदि z > x, तो:

      • ret := ret + ((a / 10) + 1) * m

    • अन्यथा जब z, x के समान है, तो:

      • ret := ret + (a / 10) * m + (b + 1)

    • अन्यथा:

      • ret := ret + (a / 10) * m

  • ret लौटाएं

  • एक फ़ंक्शन f() परिभाषित करें, जो x, n लेगा,

  • ret := 0

  • m := 1 से शुरू करें, जब m <= n, अपडेट करें m := m * 10, करें:

    • a := n / m

    • b := n mod m

    • z := a mod 10

    • यदि z > x, तो:

      • ret := ret + ((a / 10) + 1) * m

    • अन्यथा जब z, x के समान है, तो:

      • ret := ret + (a / 10) * m + (b + 1)

    • अन्यथा:

      • ret := ret + (a / 10) * m

    • यदि x, 0 के समान है, तो:

      • ret := ret - m

  • ret लौटाएं

  • मुख्य मेथड से निम्नलिखित करें:

  • ret लौटाएं

  • f(d, high) - f(d, low - 1) लौटाएं

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:

उदाहरण

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

class Solution {
public:
    int digitCount(int x) {
        int ret = 0;
        while (x) {
            ret++;
            x /= 10;
        }
        return ret;
    }

    int zero(int n) {
        int ret = 0;
        int x = 0;
        if (n == 0)
            return 1;
        for (int m = 1; m <= n; m *= 10) {
            int a = n / m;
            int b = n % m;
            int z = a % 10;
            if (digitCount(m) == digitCount(n))
                break;
            if (z > x) {
                ret += ((a / 10) + 1) * m;
            } else if (z == x) {
                ret += (a / 10) * m + (b + 1);
            } else {
                ret += (a / 10) * m;
            }
        }
        return ret;
    }

    int f(int x, int n) {
        int ret = 0;
        for (int m = 1; m <= n; m *= 10) {
            int a = n / m;
            int b = n % m;
            int z = a % 10;
            if (z > x) {
                ret += ((a / 10) + 1) * m;
            } else if (z == x) {
                ret += (a / 10) * m + (b + 1);
            } else {
                ret += (a / 10) * m;
            }
            if (x == 0) {
                ret -= m;
            }
        }
        return ret;
    }

    int digitsCount(int d, int low, int high) {
        return f(d, high) - f(d, low - 1);
    }
};

int main() {
    Solution ob;
    cout << (ob.digitsCount(1, 1, 13));
}

इनपुट

1,1,13

आउटपुट

6
  1. - C++ में 0 अंक वाली 'd' अंकों की धनात्मक पूर्णांक गिनें

    इस ट्यूटोरियल में, हम d अंकों वाली संख्याएं जिनमें 0 एक अंक के रूप में है, खोजने के लिए एक प्रोग्राम पर चर्चा करेंगे।इसके लिए हमें एक संख्या d प्रदान की जाएगी। हमारा कार्य d अंकों वाली और उनके अंकों में से एक के रूप में 0 वाली धनात्मक पूर्णांकों की संख्या को गिनना और प्रिंट करना है।उदाहरण#include<

  1. - पायथन में एक रेंज में सेट बिट्स गिनें

    एक दी गई धनात्मक संख्या जब बाइनरी में परिवर्तित होती है, तो इसमें कई सेट बिट्स होते हैं। बाइनरी संख्या में सेट बिट्स को 1 द्वारा दर्शाया जाता है। इस लेख में हम देखेंगे कि बाइनरी मान में परिवर्तित होने के बाद दी गई संख्या में सेट बिट्स की संख्या कैसे प्राप्त करें। bin और स्लाइसिंग का उपयोग करके नीचे

  1. - एक रेंज में अनसेट बिट्स गिनने के लिए पायथन प्रोग्राम

    समस्या विवरण एक धनात्मक संख्या और बिट्स की रेंज दी गई है। हमारा कार्य उस रेंज में अनसेट बिट्स (0) की संख्या गिनना है। उदाहरण इनपुट: n = 50, प्रारंभिक पता = 2, अंतिम पता = 5 आउटपुट: 2 रेंज 2 से 5 में 2 अनसेट बिट्स हैं। एल्गोरिदम bin() का उपयोग करके n को बाइनरी में बदलें। पहले दो वर्ण (0b) हटाएं।