이 문제에서는 유리수(각 행에 하나씩)를 포함하는 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