Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาค่า Floor และ Ceil ในอาร์เรย์ที่ไม่ได้จัดเรียงด้วย C++

ที่นี่เราจะดูวิธีหา Floor และ Ceiling ในอาร์เรย์ที่ไม่ได้จัดเรียง (Unsorted Array) ค่า Floor คือสมาชิกที่ใหญ่ที่สุดซึ่งน้อยกว่าหรือเท่ากับ x และค่า Ceiling คือค่าที่น้อยที่สุดซึ่งมากกว่า x ถ้าอาร์เรย์ A = [5, 6, 8, 9, 6, 5, 5, 6] และ x คือ 7 ค่า Floor คือ 6 และค่า Ceiling คือ 8

เพื่อแก้ปัญหานี้ เราจะใช้วิธีการค้นหาเชิงเส้น (Linear Search) เราจะท่องอาร์เรย์และติดตามสองระยะห่างตาม x

  • ระยะห่างน้อยที่สุดของสมาชิกที่มากกว่าหรือเท่ากับ x
  • ระยะห่างน้อยที่สุดของสมาชิกที่น้อยกว่าหรือเท่ากับ x
  • สุดท้าย พิมพ์สมาชิกที่มีระยะห่างน้อยที่สุด

ตัวอย่างโค้ด

#include <iostream>
using namespace std;

void floorCeilingPair(int arr[], int n, int x) {
    int floor_index, ceiling_index;
    int floor_dist = INT_MAX, ceil_dist = INT_MAX;
    for (int i = 0; i < n; i++) {
        if (arr[i] >= x && ceil_dist > (arr[i] - x)) {
            ceiling_index = i;
            ceil_dist = arr[i] - x;
        }
        if (arr[i] <= x && floor_dist > (x - arr[i])) {
            floor_index = i;
            floor_dist = x - arr[i];
        }
    }
    if (floor_dist == INT_MAX)
        cout << "Floor not found" << endl;
    else
        cout << "Floor value is " << arr[floor_index] << endl;
    if (ceil_dist == INT_MAX)
        cout << "Ceiling not found" << endl;
    else
        cout << "Ceil value is " << arr[ceiling_index] << endl;
}

int main() {
    int arr[] = {5, 6, 8, 9, 6, 5, 5, 6};
    int n = sizeof(arr) / sizeof(int);
    int x = 7;
    floorCeilingPair(arr, n, x);
}

ผลลัพธ์

Floor value is 6
Ceil value is 8