Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Phân số lớn nhất từ mảng trong C++


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