Phương trình đường thẳng y = mx + c. Cho mảng, m, c. Đếm số cặp điểm có thứ tự (arr[i], arr[j]) thỏa phương trình.
Ví dụ: arr=[1,2,3], m=1, c=1 → 2 cặp: (2,1) và (3,2) vì 1=1*2+1? Wait: y=mx+c. Với x=1, y=2: 2=1*1+1=2 ✓. x=2, y=3: 3=1*2+1=3 ✓.
Giải thuật
- Hàm isSatisfyingLineEquation: nếu i==j trả về false; trả về arr[j] == m*arr[i] + c
- Hai vòng lặp i, j từ 0 đến n-1
- Nếu thỏa thì count++
- Trả về count
Ví dụ minh họa
#include <bits/stdc++.h>
using namespace std;
bool isSatisfyingLineEquation(int arr[], int i, int j, int m, int c) {
if (i == j) return false;
return arr[j] == m * arr[i] + c;
}
int getOrderedPointsPairCount(int arr[], int n, int m, int c) {
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (isSatisfyingLineEquation(arr, i, j, m, c)) { count++; }
}
}
return count;
}
int main() {
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int n = 10;
int m = 1, c = 1;
cout << getOrderedPointsPairCount(arr, n, m, c) << endl;
return 0;
}
Đầu ra
9