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

หาช่วงเส้นตรงกลาง (Middle Segment) จากความยาวช่วงที่กำหนดใน C++


คำอธิบายปัญหา

ได้รับอาร์เรย์ arr[] ขนาด m ที่เก็บความยาวของช่วงเส้นตรง (Line Segments)

ช่วงเส้นตรงมีดังนี้: [0, arr[0]], [arr[0], arr[0]+arr[1]], [arr[0]+arr[1], arr[0]+arr[1]+arr[2]], ... ต้องการหา ลำดับช่วง (Segment Number) ที่จุดกึ่งกลาง (Midpoint) ของเส้นตรงทั้งหมดอยู่อยู่

ตัวอย่าง

Input: arr[] = {5, 7, 13}
Output: 3

คำอธิบาย: ช่วงเส้นตรงคือ: (0, 5), (5, 12), (12, 25) → ความยาวรวม = 25 → จุดกึ่งกลาง = 12.5 → อยู่ในช่วงที่ 3 (12 ถึง 25)

แนวทางแก้ปัญหา

  1. คำนวณ ผลรวมความยาวทั้งหมด (arrSum)
  2. หา จุดกึ่งกลาง (centerPoint) = arrSum / 2.0
  3. สะสมความยาวทีละช่วง (sum):
    • ถ้า sum == centerPoint → จุดกึ่งกลางตรงปลายช่วง → คืนค่า -1
    • ถ้า sum > centerPoint → จุดกึ่งกลางอยู่ในช่วงนี้ → คืนค่า ลำดับช่วง (i+1)

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

#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 << "The segment number where middle point lies is " << ans;
    return 0;
}

ผลลัพธ์

The segment number where middle point lies is 3