সেকেন্ডারি বক্সগুলিতে চকলেটের সংখ্যা একটি অ্যারে আকারে দেওয়া আছে এবং k ছাত্রের মধ্যে এগুলো সমানভাবে বিতরণ করতে হবে। liên tiếp বক্স নির্বাচন করতে হবে যাতে চকলেটের যোগফল k দিয়ে বিভাজ্য হয় এবং এই যোগফল সর্বোচ্চ হয়। অর্থাৎ k দিয়ে বিভাজ্য সর্বোচ্চ যোগফল वाले সাবঅ্যারে খুঁজে বের করতে হবে।
উদাহরণ
ইনপুট: Choco[] = { 1, 2, 4, 5, 2, 8, 3, 5 }, k = 3
আউটপুট: প্রতি ছাত্র পাবে চকলেট - ৫
ব্যাখ্যা: সর্বোচ্চ যোগফল वाले সাবঅ্যারে {5, 2, 8}। যোগফল = ১৫। ১৫ ÷ ৩ = ৫। ইনডেক্স {3, 4, 5}।
ইনপুট: Choco[] = { 2, 3, 7, 5, 4, 8, 2, 6 }, k = 5
আউটপুট: ৭
ব্যাখ্যা: সাবঅ্যারে {3, 7, 5, 4, 8, 2, 6}। যোগফল = ৩৫। ৩৫ ÷ ৫ = ৭।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- চকলেটের অ্যারে arr[] এবং বক্সের সংখ্যা n।
- ছাত্রের সংখ্যা k ইনপুট নেওয়া হয়।
- maxChocolates(int arr[], int n, int k) ফাংশনটি সর্বোচ্চ চকলেট হিসাব করে।
- দুটি নেস্টেড লুপ দিয়ে সব সাবঅ্যারে ট্রাভার্স করা হয়।
- sum ভেরিয়েবলে যোগফল রাখা হয়। যদি sum % k == 0 এবং sum > maxSum হয়, তবে maxSum আপডেট।
- শেষে maxSum / k রিটার্ন করা হয় (প্রতি ছাত্রের চকলেট)।
C প্রোগ্রাম উদাহরণ
#include <stdio.h>
int maxChocolates(int arr[], int n, int k) {
int sum, 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;
}
}
return (maxSum / k);
}
int main() {
int arr[] = {2, 7, 6, 1, 4, 5, 5, 3};
int n = 8, k = 3;
printf("প্রতি ছাত্র পাবে চকলেট: %d", maxChocolates(arr, n, k));
return 0;
}
আউটপুট
প্রতি ছাত্র পাবে চকলেট: 11