এই সমস্যাতে, আমাদের একটি অ্যারে 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