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

श्रेणी में संख्याओं की संख्या जहां संख्या में C++ में K से अधिक गैर-शून्य अंक नहीं होते हैं

हमें वेरिएबल से शुरू होने वाली एक पूर्णांक श्रेणी दी गई है, मान लीजिए कि वेरिएबल अंत तक शुरू करें और एक वैरिएबल k है और कार्य रेंज में संख्याओं की गणना करना है जैसे कि संख्याओं में 'k' गैर-शून्य से अधिक नहीं है अंक।

उदाहरण के लिए

इनपुट - इंट स्टार्ट =50, एंड =100 और के =2;

आउटपुट - श्रेणी में संख्याओं की संख्या जहाँ संख्या में K से अधिक गैर-शून्य अंक नहीं होते हैं:50

स्पष्टीकरण - रेंज 50 से 100 तक शुरू हो रही है और हमें k 2 के रूप में दिया गया है। जैसा कि हम देख सकते हैं, 50 और 100 के बीच की सभी संख्याओं में 2-अंकीय संख्याएँ होती हैं, जिससे संख्या 100 को छोड़कर 2 से अधिक शून्य अंकों को समाहित करना असंभव हो जाता है। एक 3-अंकीय संख्या लेकिन इसमें 2 शून्य भी होंगे जो इससे अधिक नहीं होंगे इसलिए गिनती 50 है।

इनपुट - इंट स्टार्ट =50, एंड =100 और के =1;

आउटपुट - श्रेणी में संख्याओं की संख्या जहाँ संख्या में K से अधिक शून्य न हो

अंक हैं:5

स्पष्टीकरण - रेंज 50 से 100 तक शुरू हो रही है और हमें 1 के रूप में k दिया गया है। जैसा कि हम देख सकते हैं, 50 और 100 के बीच की सभी संख्याओं में 2-अंकीय संख्याएँ होती हैं, इसलिए 1 या k से अधिक गैर-शून्य अंकों वाली संख्याएँ 50 होती हैं। , 60, 70, 80 और 90 इसलिए गिनती 5 है।

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

  • वेरिएबल प्रारंभ से लेकर वैरिएबल अंत तक पूर्णांक संख्याओं की एक श्रेणी बनाएं और k घोषित करें और मान इनपुट करें। आगे की प्रक्रिया के लिए डेटा को फ़ंक्शन में पास करें।
  • वेरिएबल प्रकार का वेक्टर बनाएं मान लें vec.
  • लूप को तब तक शुरू करें जब तक कि वेरिएबल स्टार्ट के अंदर का वैल्यू वैल्यू न हो जाए। अब, थोड़ी देर के अंदर मान को वैल% 10 के रूप में वेक्टर पर धकेलें और वैल को वैल / 10 के रूप में सेट करें।
  • vec.begin() और vec.end() को तर्क के रूप में पास करके STL में रिवर्स फ़ंक्शन को कॉल करें।
  • मेमसेट का उपयोग करके सरणी में मानों को -1 के रूप में सेट करें।
  • check_val(0, 0, 0, vec) लौटाएं जो एक ऐसा फ़ंक्शन है जो यह जांच करेगा कि अंक गैर-शून्य हैं या नहीं।
  • check_val फ़ंक्शन के अंदर-:
    • जांचें कि क्या स्थान सदिश के आकार के बराबर है, फिर IF अस्थायी जांचें <=k फिर 1 लौटाएं या 0 लौटाएं।
    • अगर गिरफ्तारी की जाँच करें [स्थान] [अस्थायी] [सेट_वल] -1 के बराबर नहीं है तो एआर [स्थान] [अस्थायी] [सेट_वल] पर मान लौटाएं।
    • परिणाम को संग्रहीत करने के लिए चर घोषित करें और इसे 0 पर सेट करें।
    • एक चर वैल घोषित करें और इसे 9 पर सेट करें यदि set_val बराबर 1 ELSE इसे i++ पर सेट करें
    • 0 से मान वैल तक के लिए लूप प्रारंभ करें
    • लूप के अंदर temp_2 को अस्थायी के रूप में सेट करें और जांचें कि IF 1 बराबर 0 नहीं है, तो temp_2 के मान को 1 से बढ़ाएँ और temp_3 को set_val के रूप में सेट करें और i को vec [place] से कम जांचें और फिर temp_3 को 1 के रूप में सेट करें
    • गिनती के मान को पुनरावर्ती कॉल के रूप में फ़ंक्शन check_val(place + 1, temp_2, temp_3, vec) पर सेट करें
    • वापसी गिरफ्तारी [स्थान] [अस्थायी] [set_val] गिनती के बराबर है।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int arr[20][20][2];
int K;
int check_val(int place, int temp, int set_val, vector < int > vec) {
   if (place == vec.size()) {
      if (temp <= K) {
         return 1;
      }
      return 0;
   }
   if (arr[place][temp][set_val] != -1) {
      return arr[place][temp][set_val];
   }
   int count = 0;
   int val = (set_val ? 9 : vec[place]);
   for (int i = 0; i <= val; i++) {
      int temp_2 = temp;
      if (i != 0) {
         temp_2++;
      }
      int temp_3 = set_val;
      if (i < vec[place]) {
         temp_3 = 1;
      }
      count += check_val(place + 1, temp_2, temp_3, vec);
   }
   return arr[place][temp][set_val] = count;
}

int Not_more_k(int val) {
   vector < int > vec;
   while (val) {
      vec.push_back(val % 10);
      val = val / 10;
   }
   reverse(vec.begin(), vec.end());
   memset(arr, -1, sizeof(arr));
   return check_val(0, 0, 0, vec);
}
int main() {
   int start = 50, end = 100;
   K = 2;
   int count = Not_more_k(end) - Not_more_k(start);
   cout << "Count of Numbers in Range where the number does not contain more than K non zero digits are: " << count;
   return 0;
}

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

आउटपुट

Count of Numbers in Range where the number does not contain more than K non zero digits are: 50

  1. वह संख्या ज्ञात कीजिए जिसमें C++ में अंक d है

    विचार करें कि हमारे पास एक अंक d है, और ऊपरी सीमा n है। हमें उन सभी संख्याओं को खोजना है जिनमें d 0 से n तक की श्रेणी में है। तो अगर n =20, और अंक 3 है, तो संख्याएं [3, 13] होंगी। इस समस्या को हल करने के लिए, हम प्रत्येक संख्या को स्ट्रिंग के रूप में लेंगे, फिर यदि अंक स्ट्रिंग में मौजूद है, तो संख

  1. C++ में संख्या को विभाजित करने वाली संख्या में अंकों की संख्या ज्ञात कीजिए

    मान लीजिए एक नंबर दिया गया है। हमें उस संख्या के अंकों की संख्या गिननी है जो संख्या को समान रूप से विभाजित करती है। मान लीजिए कि संख्या 1012 है, परिणाम 3 है। तीन अंक 1, 1 और 2 हैं जो समान रूप से 1012 को विभाजित करते हैं। इसे हल करने के लिए, हम मॉड्यूलस ऑपरेशन का उपयोग करके संख्या के प्रत्येक अंक को

  1. जांचें कि क्या प्रत्येक पंक्ति से एक संख्या का चयन किया जा सकता है जैसे कि संख्याओं का xor C++ में शून्य से अधिक है

    मान लीजिए हमारे पास N x M आकार का एक 2D सरणी है। कार्य यह जांचना है कि क्या हम प्रत्येक पंक्ति से एक संख्या का चयन कर सकते हैं, इस तरह से कि उन तत्वों का XOR गैर-शून्य या 0 से अधिक है। मान लीजिए कि एक मैट्रिक्स है इस तरह - 7 7 7 10 10 7 यदि हम XOR करते हैं, तो उत्तर शून्य नहीं होगा, क्योंकि दो