इस समस्या में, हमें एक ऐरे एरर [] दिया जाता है। हमारा कार्य अधिकतम योग ज्ञात करने के लिए एक प्रोग्राम बनाना है जैसे कि C++ में कोई भी दो तत्व आसन्न न हों।
समस्या का विवरण
हमें सरणी से अनुक्रम का अधिकतम योग खोजने की आवश्यकता है जैसे कि योग अनुक्रम से कोई भी 2 संख्याएं सरणी में आसन्न नहीं हैं।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट
arr[] = {5, 1, 3, 7, 9, 2, 5}
आउटपुट
22
स्पष्टीकरण
Taking sum sequence from index 0 with alternate elements : 5 + 3 + 9 + 5 = 22 Taking sum sequence from index 1 with alternate elements : 1 + 7 + 2 = 10
समाधान दृष्टिकोण
समस्या को हल करने के लिए, हम केवल सरणी के सभी तत्वों पर लूप करेंगे और दो रकम बनाए रखेंगे। sumVar1 और sumVar2, sumVar1 में वर्तमान तत्व के साथ योग शामिल होगा और sumVar2 में वर्तमान तत्व के बिना योग शामिल होगा।
प्रत्येक पुनरावृत्ति के साथ, हम sumVar2 को max(sumVar1, sumVar2) के रूप में अपडेट करेंगे। और फिर sumVar1 को अपडेट करें। लूप के अंत में, sumVar2 आवश्यक राशि देगा।
उदाहरण
हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम,
#include<iostream> using namespace std; int findmaximum(int a, int b){ if(a > b) return a; return b; } int findMaxSumWOAdjecent(int arr[], int N){ int maxSum1 = arr[0]; int maxSum2 = 0; int temp; for (int i = 1; i < N; i++) { temp = findmaximum(maxSum1, maxSum2); maxSum1 = maxSum2 + arr[i]; maxSum2 = temp; } return (findmaximum(maxSum1, maxSum2)); } int main(){ int arr[] = {5, 1, 3, 7, 9, 2, 5}; int N = sizeof(arr) / sizeof(arr[0]); cout<<"The maximum sum such that no two elements are adjacent is "<<findMaxSumWOAdjecent(arr, N); return 0; }
आउटपुट
The maximum sum such that no two elements are adjacent is 22