कार्य किसी सरणी में m तत्वों के योग के बीच सबसे बड़ा अंतर खोजना है। मान लीजिए कि हमारे पास एक सरणी और एक संख्या m है, तो हम पहले उच्चतम m संख्याओं का योग ज्ञात करेंगे और फिर अधिकतम अंतर प्राप्त करने के लिए उसमें से सबसे कम m संख्याओं का योग घटाएंगे। तो मुख्य बात यह है कि m संख्याओं के दो उपसमुच्चय खोजें जिनका योग सबसे अधिक और सबसे कम योग हो।
आइए अब समझते हैं कि हमें एक उदाहरण का उपयोग करके क्या करना है -
इनपुट
arr = {1,2,3,4,5} ; m=3
आउटपुट
Maximum difference here is : 6
स्पष्टीकरण - यहां सबसे बड़ी 3 संख्याएं 3,4,5 हैं और योग 12 है। सबसे छोटी 3 संख्याएं 1,2,3 हैं और योग 6 है। तो उच्चतम या अधिकतम अंतर 12-6 है जो 6 है।
इनपुट
arr = {10,13,22,8,16,14}; m=4
आउटपुट
Maximum difference here is : 20
स्पष्टीकरण - यहां सबसे बड़ी 4 संख्याएं 22,16,14,13 और योग 65 है। सबसे छोटी 4 संख्याएं 8,10,13,14 हैं और योग 45 है। तो उच्चतम या अधिकतम अंतर 65-45 है जो 20 है।
निम्नलिखित कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है
-
सेट बनाने के लिए इनपुट ऐरे arr[] और एक नंबर m लें
-
Find_diff () फ़ंक्शन में हम इनपुट सरणी और इसकी लंबाई पास कर रहे हैं और m तत्वों के सेट के योग का अधिकतम अंतर लौटा रहे हैं।
-
यहां हम सबसे पहले ऐरे एरर के एलीमेंट को सॉर्ट करेंगे []।
-
तब हम पहले m और अंतिम m तत्वों का योग ज्ञात करेंगे क्योंकि ये कम से कम m और उच्चतम m संख्या arr[] होंगे।
-
अंत में हम अंतर लौटाते हैं।
-
नोट - सॉर्ट (गिरफ्तारी [], int) को सॉर्ट किए गए सरणी को वापस करने के लिए माना जाता है।
उदाहरण
#include<stdio.h> //create function to calculate maximum difference between sum of highest and lowest m elements of array int find_diff(int arr[],int length,int m){ //for sorting the array sort(arr,length); int maxsum=0, minsum=0; //calculate now max difference between two subsets of m elements for(int i=0;i<m;i++){ minsum+=arr[i]; maxsum+=arr[length-i-1]; } return(maxsum-minsum); } // Driver program int main(){ int arr[]={1,1,2,3,5,7,1}; int m=3; cout << find_diff(arr,7,m); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो हमें निम्न आउटपुट मिलेगा -
12