Computer >> Máy Tính >  >> Lập trình >> C ++

Số hữu tỉ tối đa (hoặc phân số) từ một mảng trong C ++

Trong bài toán này, chúng ta được cung cấp một mảng 2-D chứa các số hữu tỉ (một trong mỗi hàng). Nhiệm vụ của chúng tôi là tạo một chương trình để tính số (hoặc phân số) tối đa từ một mảng trong C ++.

Mô tả sự cố - Mảng 2-D có dạng [n] [2]. Mỗi hàng có hai giá trị nguyên biểu thị giá trị của a và b trong phương trình số hữu tỉ, a / b. Chúng ta cần tìm số lớn nhất trong số tất cả các số hữu tỉ này.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào

rat[][] = {
   {3, 2},
   {5, 7},
   {1, 9},
   {11, 4}
}

Đầu ra

11 4

Giải thích

Số lượng tối đa trong số

3/2 , 5/7 , 1/9 , 11/4 is 11/4.

Phương pháp tiếp cận giải pháp

Để giải quyết vấn đề, chúng ta cần tìm giá trị của các số và sau đó so sánh giá trị của chúng. Tuy nhiên, điều này có thể gây ra lỗi nếu sự khác biệt giữa độ chính xác lớn hơn, chẳng hạn như, nếu chúng ta sử dụng float, chúng ta không thể phân biệt giữa các số hữu tỉ, 34.12313431123 và 34.12313431124.

Vì vậy, chúng tôi sẽ sử dụng một phương pháp khác để so sánh các giá trị. Điều này là sử dụng LCM của tất cả các mẫu số và sau đó thay đổi các tử số cho phù hợp. Sau đó, việc so sánh các tử số sẽ trả về con số tối đa.

Chương trình hiển thị việc triển khai giải pháp của chúng tôi,

Ví dụ

#include <bits/stdc++.h>
using namespace std;
const int n = 4;
int findMaxRatNum(int ratNum[n][2]){
   int numArray[n];
   int LCM = 1;
   int mavVal = 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 (mavVal < numArray[i]) {
         mavVal = 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];
}

Đầu ra

The maximum rational number from an array is 11/4