हमने 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