हमें लगातार बक्सों में मौजूद चॉकलेट की संख्या एक सरणी के रूप में दी गई है और एक संख्या 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), तीन तर्क लेता है - सरणी, उसका आकार और छात्रों की संख्या k।
हम फॉर लूप का उपयोग करके arr[] को शुरुआत से पार करना शुरू करेंगे।
दो चर sum और maxSum लें। Sum उपसरणी के लगातार तत्वों का योग संग्रहीत करता है।
maxSum का उपयोग अब तक मिले अधिकतम योग को संग्रहीत करने के लिए किया जाता है।
नेस्टेड फॉर लूप के अंदर तत्वों को जोड़ते रहें और जांचें कि क्या sum % k शेषफल 0 देता है। साथ ही यदि यह योग > maxSum है, तो maxSum अद्यतन करें।
अंत में maxSum में k छात्रों के बीच समान रूप से विभाजित की जा सकने वाली चॉकलेट की अधिकतम संख्या होगी।
परिणाम को maxSum / k के रूप में लौटाएं जो प्रत्येक छात्र को मिलने वाली चॉकलेट की संख्या है।
उदाहरण
#include <stdio.h> // k छात्रों के बीच समान रूप से वितरित की जाने वाली // चॉकलेट की अधिकतम संख्या ढूंढने के लिए 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; } } // 'k' छात्रों के बीच समान रूप से वितरित return (maxSum / k); } int main(){ int arr[] = { 2, 7, 6, 1, 4, 5, 5, 3 }; int n = 8; int k = 3; printf("k छात्रों के बीच समान रूप से वितरित की जाने वाली चॉकलेट की अधिकतम संख्या: %d", maxChocolates(arr, n, k)); return 0; } आउटपुट
उपरोक्त कोड चलाने पर निम्नलिखित आउटपुट उत्पन्न होगा:
k छात्रों के बीच समान रूप से वितरित की जाने वाली चॉकलेट की अधिकतम संख्या: 11