हमें एक बाइनरी सरणी दी गई है जो किसी भी दिए गए आकार के 1 और 0 अंकों को संग्रहीत कर सकती है और एक पूर्णांक वेरिएबल मान लीजिए, base। कार्य उन न्यूनतम 1 की गणना करना है जो बाइनरी सरणी के अन्य तत्वों को शक्ति उधार दे सकते हैं ताकि पूरी सरणी शक्तिशाली बन जाए। एक तत्व अपने आसन्न तत्व या आधार से कम दूरी के भीतर किसी भी अन्य तत्व को शक्ति उधार दे सकता है।
विभिन्न इनपुट-आउटपुट परिदृश्य देखते हैं:
इनपुट: int arr[] = {1, 1, 0, 1, 1, 0, 1}, int base = 7
आउटपुट: संपूर्ण सरणी को शक्तिशाली बनाने के लिए शक्ति उधार देने के लिए न्यूनतम 1s: 1
व्याख्या: हमें आकार 7 की एक बाइनरी सरणी और आधार का मान 7 दिया गया है जिसका अर्थ है कि पहला मिला अंक 1 पूरी सरणी को शक्ति उधार दे सकता है। इसलिए, arr[1] पर अंक 1 सरणी के अन्य सभी तत्वों को शक्ति उधार दे सकता है।
इनपुट: int arr[] = {1, 1, 0, 1, 1, 0, 1}, int base = 3
आउटपुट: संपूर्ण सरणी को शक्तिशाली बनाने के लिए शक्ति उधार देने के लिए न्यूनतम 1s: 2
व्याख्या: हमें आकार 7 की एक बाइनरी सरणी और आधार का मान 3 दिया गया है जिसका अर्थ है कि पहला मिला अंक 1 सरणी के अगले दो तत्वों को शक्ति उधार दे सकता है। इसलिए, arr[2] पर अंक 1 सरणी के अगले दो तत्वों को शक्ति उधार दे सकता है और arr[5] पर एक और अगले दो तत्वों को शक्ति उधार दे सकता है जिससे पूरी सरणी शक्तिशाली बन जाती है।
इनपुट: int arr[] = {1, 1, 0, 1, 1, 0, 1}, int base = 1
आउटपुट: संपूर्ण सरणी को शक्तिशाली बनाना असंभव
व्याख्या: हमें आकार 7 की एक बाइनरी सरणी और आधार का मान 1 दिया गया है जिसका अर्थ है कि पहला मिला अंक 1 सरणी के अगले एकल तत्व को शक्ति उधार दे सकता है। इसलिए, पूरी सरणी को शक्तिशाली बनाना असंभव है।
नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण:
- किसी भी दिए गए आकार की एक बाइनरी सरणी और एक पूर्णांक वेरिएबल मान लीजिए, base इनपुट करें।
- सरणी का आकार गणना करें और मान लीजिए, val नामक एक पूर्णांक प्रकार का वेरिएबल घोषित करें।
- val को उस फंक्शन कॉल पर सेट करें जो शक्तिशाली सरणी बनाने के लिए आवश्यक न्यूनतम 1 लौटाएगा और यदि यह संभव नहीं है तो यह -1 लौटाएगा जो आगे एक त्रुटि संदेश प्रदर्शित करेगा।
- फंक्शन Lend_Power(int arr[], int size, int base) के अंदर:
- बाइनरी सरणी के आकार के साथ पूर्णांक प्रकार के मानों की एक सरणी घोषित करें।
- temp नामक एक अस्थायी वेरिएबल घोषित करें और इसे -1 पर सेट करें और count को 0 पर सेट करें।
- i को 0 से सरणी के आकार तक लूप चलाएं। अंदर, जांचें यदि arr[i] 1 के बराबर है तो temp को i पर सेट करें और arr_2[i] को temp पर सेट करें।
- 0 से सरणी के आकार तक लूप चलाएं और reset_base को i + base - 1 और reset_size को size - 1 पर सेट करें। एक वेरिएबल set को arr_2[min(reset_base, reset_size)] पर सेट करें।
- जांचें यदि set = -1 OR set + base <= i तो -1 लौटाएं।
- वेरिएबल 'i' को set + base पर सेट करें।
- count लौटाएं।
उदाहरण
#include<bits/stdc++.h>
using namespace std;
int Lend_Power(int arr[], int size, int base) {
int arr_2[size];
int temp = -1;
int count = 0;
for(int i = 0; i < size; i++) {
if(arr[i] == 1) {
temp = i;
}
arr_2[i] = temp;
}
for(int i = 0; i < size;) {
int reset_base = i + base - 1;
int reset_size = size - 1;
int set = arr_2[min(reset_base, reset_size)];
if(set == -1 || set + base <= i) {
return -1;
}
i = set + base;
count++;
}
return count;
}
int main() {
int arr[] = {1, 1, 0, 1, 1, 0, 1};
int base = 2;
int size = sizeof(arr) / sizeof(arr[0]);
int val = Lend_Power(arr, size, base);
if(val == -1) {
cout << "Impossible to make entire array powerful";
} else {
cout << "Minimum 1s to lend power to make whole array powerful are: " << val;
}
return 0;
}
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा:
Minimum 1s to lend power to make whole array powerful are: 3