Dada una array ordenada, la tarea es encontrar el piso y el techo de números dados usando STL.
Ejemplos:
Input: arr[] = {1, 2, 4, 7, 11, 12, 23, 30, 32}, values[] = { 1, 3, 5, 7, 20, 24 } Output: Floor Values: 1 2 4 7 12 23 Ceil values: 1 4 7 7 23 30
En el caso de floor() : se usará el método lower_bound() os STL para encontrar el límite inferior. Esto devuelve un iterador que apunta al primer elemento en el rango [primero, último] que no se compara menos que el objetivo.
En el caso de ceil() : se usará el método upper_bound() os STL para encontrar el límite superior. Este método devuelve un iterador que apunta al primer elemento en el rango [primero, último] que compara más que un objetivo.
Implementación:
CPP
// C++ program to find the floor and ceil // of a given numbers in a sorted array #include <bits/stdc++.h> using namespace std; // Function to find floor of list of // values using lower_bound in STL void printFloor(int arr[], int n1, int findFloor[], int n2) { // Find and print the Floor Values int low; cout << "Floor : "; for (int i = 0; i < n2; i++) { low = (lower_bound(arr, arr + n1, findFloor[i]) - arr); if (arr[low] > findFloor[i]) cout << arr[low - 1] << " "; else cout << arr[low] << " "; } cout << endl; } ceil // Function to find Ceil of list of // values using upper_bound in STL void printCeil(int arr[], int n1, int findCeil[], int n2) { // Find and print the Ceil Values int up; cout << "Ceil : "; for (int i = 0; i < n2; i++) { up = (upper_bound(arr, arr + n1, findCeil[i]) - arr); if (arr[up] > findCeil[i] && arr[up - 1] == findCeil[i]) { cout << arr[up - 1] << " "; } else cout << arr[up] << " "; } cout << endl; } // Driver code int main() { // Get the sorted array int arr[] = { 1, 2, 4, 7, 11, 12, 23, 30, 32 }; int n1 = sizeof(arr) / sizeof(arr[0]); // Print Array cout << "Original Array: "; for (unsigned int i = 0; i < n1; i++) cout << " " << arr[i]; cout << "\n"; // Given values whose floor and ceil // values are needed to find int find[] = { 1, 3, 5, 7, 20, 24 }; int n2 = sizeof(find) / sizeof(find[0]); // Print Values whose floor // and ceil is to be found cout << "Values: "; for (unsigned int i = 0; i < n2; i++) cout << find[i] << " "; cout << "\n"; // Print Floor Values printFloor(arr, n1, find, n2); // Print Ceil Values printCeil(arr, n1, find, n2); return 0; }
Publicación traducida automáticamente
Artículo escrito por ranjanmonisha233 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA