Cho ba điểm khác nhau, nhiệm vụ là kiểm tra xem ba điểm đó có thẳng hàng (collinear) hay không.
Ba điểm gọi là thẳng hàng nếu chúng nằm trên cùng một đường thẳng. Hình minh họa điểm thẳng hàng và không thẳng hàng:

Đầu vào 1
x1 = 1, x2 = 2, x3 = 3, y1 = 1, y2 = 4, y3 = 5
Đầu ra 1
ba điểm không thẳng hàng
Đầu vào 2
x1 = 1, y1 = 1, x2 = 1, y2 = 4, x3 = 1, y3 = 5
Đầu ra 2
ba điểm thẳng hàng
Phương pháp tiếp cận
- Nhập tọa độ ba điểm: (x1, y1), (x2, y2), (x3, y3)
- Áp dụng công thức diện tích tam giác: x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2)
- Kiểm tra điều kiện:
- Nếu diện tích = 0 → ba điểm thẳng hàng
- Nếu diện tích ≠ 0 → ba điểm không thẳng hàng
- In kết quả
Thuật toán
Bước 1 → Khai báo hàm kiểm tra thẳng hàng:
void kiemTraThangHang(int x1, int y1, int x2, int y2, int x3, int y3) {
int a = x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2);
if (a == 0)
cout << "ba điểm thẳng hàng";
else
cout << "ba điểm không thẳng hàng";
}
Bước 2 → Trong main():
int x1 = 1, x2 = 2, x3 = 3, y1 = 1, y2 = 4, y3 = 5;
kiemTraThangHang(x1, y1, x2, y2, x3, y3);
Ví dụ mã nguồn
#include <bits/stdc++.h>
#include <math.h>
#include <stdlib.h>
using namespace std;
void kiemTraThangHang(int x1, int y1, int x2, int y2, int x3, int y3) {
int a = x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2);
if (a == 0)
cout << "ba điểm thẳng hàng";
else
cout << "ba điểm không thẳng hàng";
}
int main() {
int x1 = 1, x2 = 2, x3 = 3, y1 = 1, y2 = 4, y3 = 5;
kiemTraThangHang(x1, y1, x2, y2, x3, y3);
return 0;
}
Kết quả chạy chương trình
ba điểm không thẳng hàng