C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++の配列からの最大有理数(または分数)


この問題では、有理数(各行に1つ)を含む2次元配列が与えられます。私たちのタスクは、C ++の配列から最大合理的な数(または分数)を計算するプログラムを作成することです。

問題の説明 −2次元配列は[n][2]の形式です。各行には、有理数の方程式a/bのaとbの値を示す2つの整数値があります。これらすべての有理数の中から最大の数を見つける必要があります。

問題を理解するために例を見てみましょう

入力

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

  1. C++で有理数のLCMを見つける

    ここでは、有理数のLCMを見つける方法を説明します。有理数のリストがあります。リストが{2/7、3 / 14、5 / 3}のようであるとすると、LCMは30/1になります。 この問題を解決するには、すべての分子のLCMを計算し、次にすべての分母のgcdを計算し、次に有理数のLCMを計算する必要があります- $$ LCM =\ frac {LCM \:of \:all \:𝑛𝑢𝑚𝑒𝑟𝑎𝑡𝑜𝑟𝑠} {GCD \:of \:all \:𝑑𝑒𝑛𝑜𝑚𝑖𝑖 例 #include <iostream> #include <vector> #inc

  2. C ++の関数から配列を返す方法は?

    C ++は配列全体を返すわけではありませんが、配列へのポインタを返すことはできます。関数外では、ローカル変数のアドレスを返すことはできません。ローカル変数を静的にすることで、ローカル変数のアドレスを返すことができます。 ポインタを返す構文は次のとおりです。 int * function_name() { body } ここで function_name −ユーザーが指定した関数の名前。 以下は、関数から配列を返す例です。 例 #include <iostream> using namespace std; int * ret() {    stati