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

C++ में M अंकों से बनी N अंकों की संख्या 5 से विभाज्य है

हमने M अंकों की एक सरणी के साथ एक संख्या N दी है। हमारा काम दिए गए M अंकों से बनने वाली ndigit संख्याओं की संख्या ज्ञात करना है जो 5 से विभाज्य हैं।

आइए समस्या इनपुट और आउटपुट को समझने के लिए कुछ उदाहरण देखें।

इन −

N = 2
M = 3
arr = {5, 6, 3}

बाहर −

2

2 N अंकों की संख्याएँ 35 और 65 संभव हैं जो 5 से विभाज्य हैं। आइए एक और उदाहरण देखें।

इनपुट -

N = 1
M = 7
arr = {2, 3, 4, 5, 6, 7, 8}

आउटपुट -

1

दिए गए एरे में 1 अंक वाली केवल 1 संख्या है जो 5 से विभाज्य है। इसलिए, हमारा काम उन संख्याओं की संख्या ज्ञात करना है जो दी गई संख्या से एन अंकों के साथ बनाई जा सकती हैं जो 5 से विभाज्य हैं।

संख्या 5 से विभाज्य होने के लिए अंक 0 या 5 के साथ समाप्त होनी चाहिए। आइए एल्गोरिथम देखें

एल्गोरिदम

  • दिए गए सरणी में 0 और 5 के लिए जाँच करें। 2. यदि 0 और 5 दोनों हैं तो इकाई के स्थान पर अंक रखने के दो तरीके हैं। अन्यथा, अंक रखने का एक ही तरीका होगा।
    • गिनती को 2 से प्रारंभ करें।
    • अब, शेष स्थान में क्रमशः m-1, m-2, m-3, ... n भरने के तरीके हो सकते हैं।
    • ऐसा लूप लिखें जो 0 से n - 1. तक पुनरावृत्त हो।
      • सरणी के उस आकार को घटाएं।
      • इसे गिनती से गुणा करें।
  • यदि एक अंक 0 या 5 है तो एक अंक को इकाई के स्थान पर रखने का एक ही तरीका है।
    • गिनती को 2 से प्रारंभ करें।
    • अब, शेष स्थान में क्रमशः m-1, m-2, m-3, ... n भरने के तरीके हो सकते हैं।
    • ऐसा लूप लिखें जो 0 से n - 1. तक पुनरावृत्त हो।
      • सरणी के उस आकार को घटाएं।
      • इसे गिनती से गुणा करें।
  • यदि कोई अंक 0 या 5 नहीं हैं तो हम एक संख्या बना सकते हैं जो 5 से विभाज्य हो सकती है। उस स्थिति में वापसी -1।

कार्यान्वयन

C++ में उपरोक्त एल्गोरिथम का कार्यान्वयन निम्नलिखित है

#include <bits/stdc++.h>

using namespace std;

int numbers(int n, int m, int arr[]) {
   bool isZeroPresent = false, isFivePresent = false;
   int numbersCount = 0;
   if (m < n) {
      return -1;
   }
   for (int i = 0; i < m; i++) {
      if (arr[i] == 0) {
         isZeroPresent = true;
      }
      if (arr[i] == 5) {
         isFivePresent = true;
      }
   }
   if (isZeroPresent && isFivePresent) {
      numbersCount = 2;
      for (int i = 0; i < n - 1; i++) {
         m--;
         numbersCount = numbersCount * m;
      }
   } else if (isZeroPresent || isFivePresent) {
      numbersCount = 1;
      for (int i = 0; i < n - 1; i++) {
         m--;
         numbersCount = numbersCount * m;
      }
   } else {
      return -1;
   }
   return numbersCount;
}
int main() {
   int arr[] = {5, 6, 3};
   cout << numbers(2, 3, arr) << endl;
   return 0;
}

आउटपुट

यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम प्राप्त होंगे।

2

  1. C++ में N संख्याओं द्वारा बनाए गए N/2 के योग के वर्गों के योग को कम से कम करें

    समस्या कथन n तत्वों की एक सरणी को देखते हुए। कार्य n/2 जोड़े को इस तरह से बनाना है कि n/2 जोड़े के वर्गों का योग न्यूनतम हो। उदाहरण यदि दिया गया सरणी है - arr[] = {5, 10, 7, 4} then minimum sum of squares is 340 if we create pairs as (4, 10) and ( 5, 7) एल्गोरिदम 1. Sort the array 2. Take two vari

  1. C++ में अंकों के योग के अनुसार संख्याओं को क्रमित करें

    इस खंड में हम देखेंगे कि संख्याओं को उनके अंकों के योग के अनुसार कैसे क्रमबद्ध किया जाए। इसलिए यदि किसी संख्या में अंकों का योग कम है, तो उसे पहले रखा जाएगा, फिर अगली संख्या को अंकों के बड़े योग के साथ रखा जाएगा। data = {14, 129, 501, 23, 0, 145} छँटाई के बाद, वे होंगे - data = {0, 14, 23, 501, 145

  1. C++ प्रोग्राम X से विभाज्य सबसे बड़ी K अंक संख्या के लिए?

    दो पूर्णांक X और K दिए गए हैं। K पूर्णांक संख्या में अंकों की संख्या है। तर्क X से विभाज्य सबसे बड़ी K-अंकीय संख्या ज्ञात करना है। Input: X = 30, K = 3 Output: 980 स्पष्टीकरण 980 30 से विभाज्य तीन अंकों की सबसे बड़ी संख्या है। K को 10 के घात में लेकर 1 से घटाने पर हमें K अंकों की सबसे बड़ी संख्या प