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 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告