Mô tả bài toán
Cho mảng 2D kích thước n×2, mỗi hàng là phân số a/b. Tìm phân số lớn nhất.
Ví dụ: {{3,2},{5,7},{1,9},{11,4}} → Max = 11/4.
Giải pháp (So sánh bằng BCNN mẫu số)
- Tính BCNN của tất cả mẫu số.
- Quy đồng tử số:
num[i] = a[i] * (BCNN / b[i]). - So sánh tử số quy đồng → tìm max.
- Tránh lỗi độ chính xác float.
Ví dụ minh họa
#include <bits/stdc++.h>
using namespace std;
const int n = 4;
int findMaxRatNum(int ratNum[n][2]) {
int numArray[n];
int LCM = 1, maxVal = 0, index = 0;
for (int i = 0; i < n; i++)
LCM = (LCM * ratNum[i][1]) / __gcd(LCM, ratNum[i][1]);
for (int i = 0; i < n; i++) {
numArray[i] = ratNum[i][0] * (LCM / ratNum[i][1]);
if (maxVal < numArray[i]) { maxVal = numArray[i]; index = i; }
}
return index;
}
int main() {
int ratNum[n][2] = {{3,2},{5,7},{1,9},{11,4}};
int i = findMaxRatNum(ratNum);
cout << "The maximum rational number from an array is " << ratNum[i][0] << "/" << ratNum[i][1];
return 0;
}
Đầu ra
The maximum rational number from an array is 11/4