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

โปรแกรม C++ ตรวจสอบว่าจุดพิกัดทั้งหมดอยู่บนสองเส้นขนานหรือไม่


โจทย์: กำหนดอาร์เรย์ arr[] จุดพิกัดคือ (i, arr[i]) ตรวจสอบว่าจุดทั้งหมดอยู่บนสองเส้นตรงขนานได้หรือไม่

ตัวอย่าง: arr = {2,6,8,12,14} จุดอยู่บนสองเส้นขนาน เส้นแรก: (1,2), (3,8), (5,14) เส้นที่สอง: (2,6), (4,12)

วิธีแก้: เปรียบเทียบความชัน (slope) ของเส้นที่สร้างจากจุด สามจุดแรกต้องมีสองจุดอยู่เส้นเดียวกัน คำนวณ截距 (intercept) ถ้าได้ค่า intercept แตกต่างกันสองค่า = อยู่บนสองเส้นขนานได้

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

#include <bits/stdc++.h>
using namespace std;

bool is_intercept(double slope, int arr[], int num) {
    set<double> Lines;
    for (int i = 0; i < num; i++)
        Lines.insert(arr[i] - slope * (i));
    return Lines.size() == 2;
}

bool is_parallel(int arr[], int num) {
    bool slope1 = is_intercept(arr[1] - arr[0], arr, num);
    bool slope2 = is_intercept(arr[2] - arr[1], arr, num);
    bool slope3 = is_intercept((arr[2] - arr[0]) / 2.0, arr, num);
    return (slope1 || slope2 || slope3);
}

int main() {
    int arr[] = {2,6,8,12,14};
    int num = sizeof(arr)/sizeof(arr[0]);
    cout << (int)is_parallel(arr, num);
    return 0;
}

ผลลัพธ์

1