हमें एक सरणी के रूप में क्रमागत बक्सों में मौजूद कई चॉकलेट दी गई हैं और एक संख्या k दी गई है जो उन छात्रों की संख्या को दर्शाती है जिनके बीच ये चॉकलेट वितरित की जाएंगी। यहाँ कार्य क्रमागत बक्सों का चयन करना है ताकि उनमें मौजूद चॉकलेट का योग k छात्रों के बीच समान रूप से वितरित किया जा सके। साथ ही हमें यह भी सुनिश्चित करना होगा कि चॉकलेट की संख्या अधिकतम हो।
इसके लिए हम सरणी को बाएं से दाएं पार करेंगे और चॉकलेट की संख्या जोड़ना शुरू करेंगे और योग को k से विभाजित करेंगे। यदि इसे पूर्ण रूप से 0 के बराबर शेषफल से विभाजित किया जाता है तो इस योग को एक चर में संग्रहीत करें। जैसे-जैसे हम आगे बढ़ते हैं, हम इस प्रक्रिया को तब तक दोहराते हैं जब तक कि हमें ऐसी अधिकतम राशि प्राप्त न हो जाए। समस्या यह है कि k से विभाज्य अधिकतम योग उपसरणी ज्ञात की जाए।
इनपुट
Choco[]={ 1,2,4,5,2,8,3,5 } k=3
आउटपुट −अधिकतम संख्या में चॉकलेट k छात्रों के बीच समान रूप से वितरित की जाएंगी - 5
स्पष्टीकरण - अधिकतम योग उपसरणी { 5,2,8 } है। चॉकलेट का योग 15 है। समान रूप से विभाजित करने पर, सभी 3 छात्रों को मिलने वाली अधिकतम चॉकलेट 5 है।
नोट − बॉक्स क्रमागत हैं और अनुक्रमणिका { 3,4,5 }
. हैंइनपुट
Choco[] = { 2,3,7,5,4,8,2,6 } k=5
आउटपुट −अधिकतम संख्या में चॉकलेट k छात्रों के बीच समान रूप से वितरित की जाएंगी − 7
स्पष्टीकरण - अधिकतम योग उपसरणी { 3,7,5,4,8,2,6} है। चॉकलेट का योग 35 है।
समान रूप से विभाजित करने पर, सभी 5 छात्रों को मिलने वाली अधिकतम चॉकलेट 7 है।
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
-
हम एक पूर्णांक सरणी arr[] लेते हैं जिसमें लगातार कंटेनरों में कई चॉकलेट होते हैं।
-
तत्वों की संख्या 'n' बक्सों की संख्या को दर्शाती है।
-
नहीं लो. छात्रों की 'k' इनपुट के रूप में।
-
फ़ंक्शन maxChocolate(int arr[], int n, int k ), तीन तर्क लेता है - सरणी, इसका आकार और नहीं। छात्रों के कश्मीर.
-
हम लूप के लिए शुरुआत से arr[] का पता लगाना शुरू करेंगे।
-
दो चर योग और मैक्ससम लें। Sum सबअरे के लगातार तत्वों का योग संग्रहीत करता है।
-
maxSum का उपयोग अब तक मिली अधिकतम राशि को संग्रहीत करने के लिए किया जाता है।
-
लूप के लिए नेस्टेड के अंदर तत्वों को जोड़ते रहें और जांचें कि क्या sum%k शेष 0 देता है।
साथ ही अगर यह राशि> अधिकतम राशि, अधिकतम राशि अपडेट करें।
-
अंतिम अधिकतम राशि की अधिकतम संख्या होगी। चॉकलेट की, जिसे k छात्रों में समान रूप से विभाजित किया जा सकता है।
-
परिणाम को maxSum/k के रूप में लौटाएं जो प्रत्येक छात्र को मिलने वाली चॉकलेट की संख्या है।
उदाहरण
#include <stdio.h> // to find the maximum number // of chocolates to be distributed equally among // k students int maxChocolates(int arr[], int n, int k){ int sum; int maxSum = 0; for(int i=0;i<n;i++){ sum=0; for(int j=i;j<n;j++){ sum+=arr[j]; if(sum%k==0 && sum>maxSum) maxSum=sum; } } // distributed equally among 'k' students return (maxSum / k); } int main(){ int arr[] = { 2, 7, 6, 1, 4, 5 ,5, 3 }; int n =8; int k =3; printf("Maximum number of chocolates to be distributed equally among k students: %d ",maxChocolates(arr, n, k)); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
Maximum number of chocolates to be distributed equally among k students − 11