এই সমস্যায় আমাদের n উপাদানের একটি অ্যারে দেওয়া হয়েছে। আমাদের কাজ হলো অ্যারে উপাদান ব্যবহার করে অ্যারে সমান করার জন্য অপারেশনের সংখ্যা গণনা করার প্রোগ্রাম তৈরি করা।
আমাদের যোগ বা বিয়োগ অপারেশনের সংখ্যা গণনা করতে হবে যাতে অ্যারের সব উপাদান সমান হয়।
উদাহরণ দিয়ে বুঝি
ইনপুট: arr[] = {4, 0, 3, 1, 2}
আউটপুট: ৩
ব্যাখ্যা:
সমান মান হবে ২।
মোট যোগফল একই থাকবে। আমরা arr[3]-এ থেকে ১ নেওয়া arr[1]-এ যোগ করব। তারপর arr[0]-এ থেকে ২ নেওয়া arr[1]-এ যোগ করব।
সমাধানের পদ্ধতি
একটি সহজ সমাধান হলো অ্যারে থেকে এমন একটি উপাদান বের করা যেটি সমান উপাদান হিসেবে কাজ করবে। আমরা গড় বের করে চেক করব অপারেশন সম্ভব কিনা, যদি গড় পূর্ণসংখ্যা হয় তবে সমান করা সম্ভব, অন্যথায় নয়।
যদি সম্ভব হয়, তবে প্রয়োজনীয় অপারেশনের সংখ্যা গণনা করব এবং ফেরত দিব। অপারেশনের সংখ্যা হলো সব সংখ্যার গড়ের সাথে tuyệt đối পার্থক্যের যোগফলের অর্ধেক।
অ্যালগরিদম:
ধাপ ১: অ্যারের সব উপাদানের গড় বের করুন।
ধাপ ২: যদি গড় পূর্ণসংখ্যা না হয়, -1 ফেরত দিন (সমান করা সম্ভব নয়)।
ধাপ ৩: অন্যথায়, সব উপাদান এবং গড়ের tuyệt đối পার্থক্য বের করুন।
ধাপ ৪: গড়ের অর্ধেক ফেরত দিন।
সমাধান minhaj করার প্রোগ্রাম
#include <bits/stdc++.h>
using namespace std;
int calcEqualisedOperations(int arr[], int n) {
int sum = 0, average, operations = 0;
for (int i = 0; i < n; i++)
sum += arr[i];
if (sum % n != 0)
return -1;
average = sum/n;
for (int i = 0; i < n; i++)
operations += ( abs(arr[i] - average) / 2 );
return operations;
}
int main() {
int arr[] = { 5, 3, 2, 6 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Operations required to equalize an array using array elements is " << calcEqualisedOperations(arr, n);
return 0;
}
আউটপুট
Operations required to equalize an array using array elements is 2