Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 배열의 최대 유리수(또는 분수)

<시간/>

이 문제에서는 유리수(각 행에 하나씩)를 포함하는 2차원 배열이 제공됩니다. 우리의 임무는 C++의 배열에서 최대 유리수(또는 분수)를 계산하는 프로그램을 만드는 것입니다.

문제 설명 - 2차원 배열은 [n][2] 형식입니다. 각 행에는 유리수 방정식 a/b에서 a와 b의 값을 나타내는 두 개의 정수 값이 있습니다. 이 모든 유리수 중에서 가장 큰 수를 찾아야 합니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력

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

출력

11 4

설명

다음 중 최대 수

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

솔루션 접근 방식

문제를 해결하려면 숫자의 값을 찾은 다음 값을 비교해야 합니다. 그러나 float를 사용하면 34.12313431123과 34.12313431124 사이의 유리수를 구별할 수 없는 것처럼 정밀도 사이의 차이가 더 크면 오류가 발생할 수 있습니다.

따라서 다른 방법을 사용하여 값을 비교합니다. 이것은 모든 분모의 LCM을 사용한 다음 그에 따라 분자를 변경하는 것입니다. 그 후, 분자의 비교는 최대 수를 반환합니다.

우리 솔루션의 구현을 보여주는 프로그램

예시

#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];
}

출력

The maximum rational number from an array is 11/4