কম্পিউটার টিউটোরিয়াল

C++ দিয়ে একই অ্যারেতে প্রতিটি এলিমেন্টের ফ্লোর (Floor) বের করা


এই সমস্যাতে, আমাদের একটি অ্যারে arr[] দেওয়া আছে যাতে ইন্টিজার এলিমেন্ট আছে। আমাদের কাজ হল একই অ্যারেতে প্রতিটি এলিমেন্টের ফ্লোর (Floor) বের করার প্রোগ্রাম তৈরি করা। যদি কোনো এলিমেন্টের ফ্লোর থাকে, তবে প্রিন্ট করব, অন্যথায় -1 প্রিন্ট করব।

অ্যারেতে একটি এলিমেন্টের ফ্লোর হল সেই এলিমেন্টের চেয়ে ছোট বা সমান সবচেয়ে কাছাকাছি এলিমেন্ট।

উদাহরণ দেখি:

ইনপুট: arr[] = {3, 1, 5 ,7, 8, 2} আউটপুট: 2 -1 3 5 7 1

সমাধানের পদ্ধতি

একটি পদ্ধতি হল নেস্টেড লুপ ব্যবহার করা। একটি লুপ প্রতিটি এলিমেন্টের জন্য এবং ইনার লুপ সেটির ফ্লোর বের করার জন্য।

আরেকটি পদ্ধতি হল একটি একস্ট্রা অ্যারে ব্যবহার করে সর্টেড অ্যারে স্টোর করা। তারপর ওরিজিনাল অ্যারে লুপ করে সর্টেড অ্যারেতে বাইনারি সার্চ দিয়ে ফ্লোর বের করা।

উদাহরণ

#include <bits/stdc++.h> using namespace std; void printFloorEle(int arr[], int n){    vector<int> sortedArr(arr, arr + n);    sort(sortedArr.begin(), sortedArr.end());    for (int i = 0; i < n; i++) {       if (arr[i] == sortedArr[0]) {          if (arr[i] == sortedArr[1])             cout<<arr[i];          else             cout<<-1;          cout<<"\t";          continue;       }       auto iterator = lower_bound(sortedArr.begin(),sortedArr.end(), arr[i]);       if (iterator != sortedArr.end() && *(iterator + 1) == arr[i])          cout<<arr[i]<<"\t";       else          cout<<*(iterator - 1)<<"\t";    } } int main(){    int arr[] = { 3, 1, 5 ,7, 8, 2 };    int n = sizeof(arr) / sizeof(arr[0]);    cout<<"The Floor of every element of the given array is ";    printFloorEle(arr, n);    return 0; }

আউটপুট

The Floor of every element of the given array is 2 -1 3 5 7 1

  1. সি++ প্রোগ্রাম: অ্যারেতে প্রতিটি উপাদানের জন্য সবচেয়ে নিকটবর্তী বড় মান (Closest Greater Value) খুঁজে বের করা

  2. C++ STL-এ Array get() ফাংশন

  3. C++ STL-এ Array বাস্তবায়ন (C++ Program to Implement Array in STL)

  4. অ্যারেতে সবচেয়ে বড় এলিমেন্ট (Largest Element) বের করার C++ প্রোগ্রাম