কম্পিউটার

C++ এ ক্রমাগত জোড়া উপাদানের গুণফলের যোগফল কমাতে একটি বিন্যাস পুনর্বিন্যাস করুন


আমাদেরকে একটি ধনাত্মক পূর্ণসংখ্যা টাইপ অ্যারে দেওয়া হয়েছে, ধরা যাক, যে কোনো প্রদত্ত আকারের arr[]। কাজটি হল একটি বিন্যাসকে এমনভাবে সাজানো যাতে আমরা যখন একটি উপাদানকে তার বিকল্প উপাদান দিয়ে গুণ করি এবং তারপরে সমস্ত ফলাফল উপাদান যোগ করি তখন এটি সর্বনিম্ন যোগফল প্রদান করে।

আসুন এর জন্য বিভিন্ন ইনপুট আউটপুট পরিস্থিতি দেখি -

ইনপুট − int arr[] ={2, 5, 1, 7, 5, 0, 1, 0}

আউটপুট − যোগফলকে ছোট করার জন্য একটি বিন্যাসের পুনঃবিন্যাস, অর্থাৎ ধারাবাহিক জোড়া উপাদানগুলির গুণফলের 7 হল:7 0 5 0 5 1 2 1

ব্যাখ্যা − আমাদেরকে 8 আকারের একটি পূর্ণসংখ্যার অ্যারে দেওয়া হয়েছে। এখন, আমরা অ্যারেটিকে পুনরায় সাজাব যেমন 7 0 5 0 5 1 2 1। আমরা পরীক্ষা করব যে এটির সর্বনিম্ন যোগফল 7 * 0 + 5 * 0 + 5 * 1 + 2 ফেরত আসছে কিনা। * 1 =0 + 0 + 5 + 2 =7।

ইনপুট − int arr[] ={1, 3, 7, 2, 4, 3}

আউটপুট − ক্রমাগত জোড়া উপাদানের গুণফলের যোগফল অর্থাৎ 24 ছোট করার জন্য একটি অ্যারের পুনর্বিন্যাস হল:7 1 4 2 3 3

ব্যাখ্যা − আমাদেরকে 6 আকারের একটি পূর্ণসংখ্যার অ্যারে দেওয়া হয়েছে। এখন, আমরা অ্যারেটিকে পুনরায় সাজাব যেমন 7 1 4 2 3 3। আমরা পরীক্ষা করব যে এটির সর্বনিম্ন যোগফল 7 * 1 + 4 * 2 + 3 * 3 =7 + 8 ফেরত আসছে কিনা। + 9 =24।

নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতিটি নিম্নরূপ

  • পূর্ণসংখ্যা ধরনের উপাদানগুলির একটি অ্যারে ইনপুট করুন এবং একটি অ্যারের আকার গণনা করুন৷

  • সাজানোর ফাংশনে অ্যারের অ্যারে এবং সাইজ পাস করে C++ STL-এর সাজানোর পদ্ধতি ব্যবহার করে একটি অ্যারে সাজান।

  • একটি পূর্ণসংখ্যা ভেরিয়েবল ঘোষণা করুন এবং এটিকে ফাংশনে কল দিয়ে সেট করুন Rearrange_min_sum(arr, size)

  • Rearrange_min_sum(arr, size)

    ফাংশনের ভিতরে
    • একটি ভেরিয়েবল তৈরি করুন, ধরা যাক, 'জোড়' এবং 'বিজোড়' টাইপ ভেক্টর যা পূর্ণসংখ্যা ভেরিয়েবল সংরক্ষণ করে।

    • একটি পরিবর্তনশীলকে টেম্প এবং মোট হিসাবে ঘোষণা করুন এবং এটিকে 0 দিয়ে শুরু করুন।

    • i থেকে 0 পর্যন্ত FOR লুপ শুরু করুন যতক্ষণ না আমি আকারের চেয়ে কম। লুপের ভিতরে, পরীক্ষা করুন যদি i আকার/2 এর থেকে কম তাহলে arr[i] কে বিজোড় ভেক্টরে ধাক্কা দিন ELSE, arr[i] কে জোড় ভেক্টরে চাপুন

    • even.begin(), even.end() এবং greater() পাস করে সাজানোর পদ্ধতিতে কল করুন।

    • i থেকে 0 পর্যন্ত লুপ শুরু করুন যতক্ষণ না আমি even.size() এর চেয়ে কম। লুপের ভিতরে, arr[temp++] to even[j], arr[temp++] to odd[j] এবং total to total + even[j] * odd[j]

    • মোট রিটার্ন

  • ফলাফল প্রিন্ট করুন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
int Rearrange_min_sum(int arr[], int size){
   vector<int> even, odd;
   int temp = 0;
   int total = 0;
   for(int i = 0; i < size; i++){
      if (i < size/2){
         odd.push_back(arr[i]);
      }
      else{
         even.push_back(arr[i]);
      }
   }
   sort(even.begin(), even.end(), greater<int>());
   for(int j = 0; j < even.size(); j++){
      arr[temp++] = even[j];
      arr[temp++] = odd[j];
      total += even[j] * odd[j];
   }
   return total;
}
int main(){
   int arr[] = { 2, 5, 1, 7, 5, 0, 1, 0};
   int size = sizeof(arr)/sizeof(arr[0]);
   //sort an array
   sort(arr, arr + size);
   //call function
   int total = Rearrange_min_sum(arr, size);
   cout<<"Rearrangement of an array to minimize sum i.e. "<<total<<" of product of consecutive pair elements is: ";
   for(int i = 0; i < size; i++){
      cout << arr[i] << " ";
   }
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট তৈরি করবে

Rearrangement of an array to minimize sum i.e. 7 of product of consecutive pair elements is: 7 0 5 0 5 1 2 1

  1. C++ এ একটি অ্যারেতে সমস্ত জোড়ার যোগফলের XOR এর যোগফল

  2. C++ এ সংখ্যার বিন্যাসের গুণফলের প্রথম সংখ্যা

  3. C++ এ অ্যারের উপাদানগুলির ফ্রিকোয়েন্সি গণনা করা হচ্ছে

  4. C++ এ একটি অ্যারেতে সমস্ত মৌলিক সংখ্যার গুণফল