यहां हम एक रोचक समस्या देखेंगे। मान लीजिए आकार n का एक बाइनरी सरणी दिया गया है। यहां n > 3। एक सत्य मान या 1 सक्रिय अवस्था को इंगित करता है, और 0 या असत्य निष्क्रिय को इंगित करता है। एक अन्य संख्या k भी दी गई है। हमें k दिनों के बाद सक्रिय या निष्क्रिय सेल ढूंढने हैं। हर दिन i-वें सेल की अवस्था सक्रिय होगी यदि बाएं और दाएं सेल समान नहीं हैं, यदि वे समान हैं, तो यह निष्क्रिय होगा। सबसे बाएं और सबसे दाएं सेल के पहले और बाद में कोई सेल नहीं होता। इसलिए सबसे बाएं और सबसे दाएं सेल हमेशा 0 होते हैं।
आइए एक उदाहरण देखें ताकि विचार मिल सके। मान लीजिए एक सरणी है जैसे {0, 1, 0, 1, 0, 1, 0, 1}, और k का मान = 3। तो आइए देखें कि यह दिन-प्रतिदिन कैसे बदलता है।
- 1 दिन के बाद सरणी होगी {1, 0, 0, 0, 0, 0, 0, 0}
- 2 दिनों के बाद सरणी होगी {0, 1, 0, 0, 0, 0, 0, 0}
- 3 दिनों के बाद सरणी होगी {1, 0, 1, 0, 0, 0, 0, 0}
तो 2 सक्रिय सेल और 6 निष्क्रिय सेल
एल्गोरिदम
activeCellKdays(arr, n, k)
begin make a copy of arr into temp for i in range 1 to k, do temp[0] := 0 XOR arr[1] temp[n-1] := 0 XOR arr[n-2] for each cell i from 1 to n-2, do temp[i] := arr[i-1] XOR arr[i+1] done copy temp to arr for next iteration done count number of 1s as active, and number of 0s as inactive, then return the values. end
उदाहरण
#includeusing namespace std; void activeCellKdays(bool arr[], int n, int k) { bool temp[n]; //temp arr की कॉपी रखता है for (int i=0; i Active Cells = 2, Inactive Cells = 6