কাজটি হল একটি অ্যারেতে 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।
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
-
সেট তৈরির জন্য ইনপুট অ্যারে অ্যারে[] এবং একটি সংখ্যা m নিন
-
find_diff() ফাংশনে আমরা ইনপুট অ্যারে এবং এর দৈর্ঘ্য অতিক্রম করছি এবং m উপাদানের সেটের যোগফলের সর্বোচ্চ পার্থক্য ফিরিয়ে দিচ্ছি।
-
এখানে আমরা প্রথমে অ্যারে অ্যারের উপাদানগুলিকে বাছাই করব।
-
তারপর আমরা প্রথম m এবং শেষ m উপাদানগুলির যোগফল খুঁজে পাব কারণ এগুলি হবে সবচেয়ে কম m এবং সর্বোচ্চ m সংখ্যার arr[]।
-
অবশেষে আমরা পার্থক্য ফিরিয়ে দিই।
-
দ্রষ্টব্য − sort(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