Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tìm đoạn thẳng chứa điểm giữa từ các độ dài đoạn cho trước trong C++


Mô tả vấn đề

Cho mảng arr[] kích thước m đại diện cho độ dài các đoạn thẳng. Các đoạn thẳng lần lượt là từ 0 đến arr[0], arr[0] đến arr[1], v.v. Nhiệm vụ là tìm đoạn thẳng chứa điểm giữa (middle point) của toàn bộ đường thẳng.

Ví dụ minh họa

Đầu vào:

arr[] = {5, 7, 13}

Đầu ra:

3

Giải thích:

Các đoạn: (0, 5), (5, 12), (12, 25)
Tổng độ dài = 25, điểm giữa = 12.5
Điểm 12.5 nằm trong đoạn thứ 3 (12, 25)

Phương pháp giải quyết

Tính điểm giữa bằng tổng_độ_dài / 2. Nếu điểm giữa trùng với đầu hoặc cuối của một đoạn, trả về -1. Ngược lại, trả về số thứ tự đoạn chứa điểm giữa.

Chương trình minh họa

#include <iostream>
using namespace std;

int findSegmentWithMidPoint(int n, int m, int segment_length[]) {
    double centerPoint = (1.0 * n) / 2.0;
    int sum = 0;
    int segment = 0;
    for (int i = 0; i < m; i++) {
        sum += segment_length[i];
        if ((double)sum == centerPoint) {
            segment = -1;
            break;
        }
        if (sum > centerPoint) {
            segment = i + 1;
            break;
        }
    }
    return segment;
}

int main() {
    int m = 3;
    int segment_length[] = {5, 7, 13};
    int arrSum = 0;
    for(int i = 0; i < m; i++)
        arrSum += segment_length[i];
    int ans = findSegmentWithMidPoint(arrSum, m, segment_length);
    cout << "Số đoạn chứa điểm giữa là " << ans;
    return 0;
}

Kết quả đầu ra

Số đoạn chứa điểm giữa là 3