কম্পিউটার

সর্বাধিক সংখ্যক চকোলেট সি-তে k ছাত্রদের মধ্যে সমানভাবে বিতরণ করা হবে


আমাদের একটি অ্যারের আকারে পরপর বাক্সে উপস্থিত বেশ কয়েকটি চকলেট দেওয়া হয়েছে এবং একটি সংখ্যা 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টি চকলেট পাওয়া যায়।

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • আমরা একটি পূর্ণসংখ্যা অ্যারে অ্যারে নিই[] যাতে পরপর পাত্রে বেশ কয়েকটি চকলেট থাকে।

  • উপাদানের সংখ্যা 'n' বাক্সের সংখ্যাকে প্রতিনিধিত্ব করে।

  • কোন নিতে. ইনপুট হিসাবে ছাত্রদের 'k'।

  • ফাংশন maxChocolate( int arr[], int n, int k ), তিনটি আর্গুমেন্ট নেয় - অ্যারে, এর আকার এবং সংখ্যা। ছাত্রদের k.

  • আমরা ফর লুপ ব্যবহার করে শুরু থেকে arr[] অতিক্রম করা শুরু করব।

  • দুটি ভেরিয়েবল sum এবং maxSum নিন। যোগফল সাবয়ারের ধারাবাহিক উপাদানগুলির যোগফল সংরক্ষণ করে।

  • maxSum এখন পর্যন্ত পাওয়া সর্বাধিক যোগফল সংরক্ষণ করতে ব্যবহৃত হয়।

  • লুপের জন্য নেস্টেড উপাদানগুলি যোগ করতে থাকুন এবং sum%k অবশিষ্ট 0 দেয় কিনা তা পরীক্ষা করে দেখুন৷

    এছাড়াও এই যোগফল> maxSum হলে, maxSum আপডেট করুন।

  • শেষ পর্যন্ত maxSum এর সর্বোচ্চ নম্বর থাকবে। চকলেট যা 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

  1. C++ পাথের দৈর্ঘ্য সর্বাধিক সংখ্যক বাঁক রয়েছে

  2. C++ এ একটি সাবস্ট্রিং-এর সংঘটনের সর্বাধিক সংখ্যা

  3. C++ এ দ্বিপক্ষীয় গ্রাফে প্রান্তের সর্বাধিক সংখ্যা

  4. পাইথন প্রোগ্রাম সর্বোচ্চ তিনটি।