C++中数组的最大有理数(或分数)


在这个问题中,我们得到一个包含有理数(每一行一个)的二维数组。我们的任务是创建一个程序来计算C++中数组中的最大有理数(或分数)。

问题描述 − 二维数组的形式为[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.

解决方案

为了解决这个问题,我们需要找到数字的值,然后比较它们的值。但是,如果精度差异很大,这可能会导致错误,例如,如果我们使用浮点数,我们就无法区分有理数34.12313431123和34.12313431124。

因此,我们将使用另一种方法来比较值。这是使用所有分母的最小公倍数,然后相应地更改分子。之后,分子的比较将返回最大数。

程序展示了我们解决方案的实现:

示例

 在线演示

#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

更新于:2020年9月15日

195 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告