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

📅  最后修改于: 2021-04-29 14:44:00             🧑  作者: Mango

给定有理数,任务是找到最大有理数。
例子:

Input : ra_num = {{1, 2},
              {2, 3},
              {3, 4},
              {4, 5}};
Output : 4 5

Input : ra_num = {{10, 12},
              {12, 33},
              {33, 14},
              {14, 15}};
Output : 33 14

一个简单的解决方案是找到浮点值并比较浮点值。浮点计算可能会导致精度错误。我们可以使用以下方法避免它们。
说的数字是1 / 2、2 / 3、3 / 4、4 / 5
首先采用(2,3,4,5)的LCM,它是所有有理数的分母。因此它的LCM为60,然后除以所有分母并除以所有分子的倍数,因此分子的值为(30,40,45,48)
然后找到这些有理数之间的最大值。因此,这里的最后一个分子为max,然后输出最后一个有理数。是4/5。

C++
// CPP program to find the maximum rational
// number in an array.
#include 
using namespace std;
 
struct Rational {
 
    // numerator and Denominator
    int nume, deno;
};
 
// here we find the Denominator LCM
int lcmOfDenominator(vector ra_num)
{
    // get the first Denominator as lcm
    int lcm = ra_num[0].deno;
    int i;
 
    // find the lcm of all relational
    // number Denominator
    for (i = 1; i < ra_num.size(); i++)
        lcm = (lcm * (ra_num[i].deno)) /
                 __gcd(lcm, ra_num[i].deno);
     
 
    // return the lcm
    return lcm;
}
 
int maxRational(vector ra_num)
{
    // take a temp array for find
    // maximum numerator after multiple
    int temp[ra_num.size()] = { 0 };
 
    // get here the lcm of all rational
    //number denominator
    int lcm = lcmOfDenominator(ra_num);
 
    // take maximum for get maximum index
    int maximum = 0;
    int maximumind = 0;
 
    // find the index which contain maximum value
    for (int i = 0; i < ra_num.size(); i++) {
 
        // divide lcm with denominator
        // and multiple with numerator
        temp[i] = (ra_num[i].nume) *
                  (lcm / ra_num[i].deno);
 
        // get the maximum numerator
        if (maximum < temp[i]) {
            maximum = temp[i];
            maximumind = i;
        }
    }
 
    // return index which contain
    // maximum rational number
    return maximumind;
}
 
int main()
{
    // given rational number
    vector ra_num = { { 1, 2 },
                                { 2, 3 },
                                { 3, 4 },
                                { 4, 5 } };
 
    // get the index which contain maximum value
    int index_max = maxRational(ra_num);
 
    // print numerator and denominator
    cout << ra_num[index_max].nume << " "
         << ra_num[index_max].deno << "\n";
}


Java
// Java program to find the maximum rational
// number in an array.
import java.util.*;
 
class GFG
{
 
static class Rational
{
 
    // numerator and Denominator
    int nume, deno;
 
    public Rational(int nume, int deno)
    {
        this.nume = nume;
        this.deno = deno;
    }
         
};
 
// here we find the Denominator LCM
static int lcmOfDenominator(Vector ra_num)
{
    // get the first Denominator as lcm
    int lcm = ra_num.get(0).deno;
    int i;
 
    // find the lcm of all relational
    // number Denominator
    for (i = 1; i < ra_num.size(); i++)
        lcm = (lcm * (ra_num.get(i).deno)) /
                __gcd(lcm, ra_num.get(i).deno);
     
    // return the lcm
    return lcm;
}
 
static int maxRational(Vector ra_num)
{
    // take a temp array for find
    // maximum numerator after multiple
    int []temp = new int[ra_num.size()];
     
    // get here the lcm of all rational
    //number denominator
    int lcm = lcmOfDenominator(ra_num);
 
    // take maximum for get maximum index
    int maximum = 0;
    int maximumind = 0;
 
    // find the index which contain maximum value
    for (int i = 0; i < ra_num.size(); i++)
    {
 
        // divide lcm with denominator
        // and multiple with numerator
        temp[i] = (ra_num.get(i).nume) *
                  (lcm / ra_num.get(i).deno);
 
        // get the maximum numerator
        if (maximum < temp[i])
        {
            maximum = temp[i];
            maximumind = i;
        }
    }
 
    // return index which contain
    // maximum rational number
    return maximumind;
}
 
static int __gcd(int a, int b)
{
    if (b == 0)
        return a;
    return __gcd(b, a % b);
}
 
// Driver Code
public static void main(String[] args)
{
    // given rational number
    Vector ra_num = new Vector();
        ra_num.add(new Rational( 1, 2 ));
    ra_num.add(new Rational( 2, 3 ));                        
    ra_num.add(new Rational( 3, 4 ));                        
    ra_num.add(new Rational( 4, 5 ));                        
 
    // get the index which contain maximum value
    int index_max = maxRational(ra_num);
 
    // print numerator and denominator
    System.out.println(ra_num.get(index_max).nume +
                 " " + ra_num.get(index_max).deno);
    }
}
 
// This code is contributed by Princi Singh


Python3
# Python3 program to find the maximum rational
# number in an array.
class Rational:
     
    def __init__(self, nume, deno):
         
        # Numerator and Denominator
        self.nume = nume
        self.deno = deno
 
def computeGCD(x, y):
 
    while(y):
        x, y = y, x % y
 
    return x
     
# Here we find the Denominator LCM
def lcmOfDenominator(ra_num):
 
    # Get the first Denominator as lcm
    lcm = ra_num[0].deno
 
    # Find the lcm of all relational
    # number Denominator
    for i in range(1, len(ra_num)):
        lcm = ((lcm * (ra_num[i].deno)) //
       computeGCD(lcm, ra_num[i].deno))
     
    # return the lcm
    return lcm
 
def maxRational(ra_num):
 
    # Take a temp array for find
    # maximum numerator after multiple
    temp = [0 for i in range(len(ra_num))]
 
    # Get here the lcm of all rational
    # number denominator
    lcm = lcmOfDenominator(ra_num)
 
    # Take maximum for get maximum index
    maximum = 0
    maximumind = 0
 
    # Find the index which contain
    # maximum value
    for i in range(len(ra_num)):
     
        # Divide lcm with denominator
        # and multiple with numerator
        temp[i] = ((ra_num[i].nume) *
            (lcm // ra_num[i].deno))
                 
        # Get the maximum numerator
        if (maximum < temp[i]):
            maximum = temp[i]
            maximumind = i
 
    # Return index which contain
    # maximum rational number
    return maximumind
 
# Driver code
if __name__=="__main__":
     
    # Given rational number
    ra_num = []
    ra_num.append(Rational(1, 2))
    ra_num.append(Rational(2, 3))
    ra_num.append(Rational(3, 4))
    ra_num.append(Rational(4, 5))
                             
    # Get the index which contain maximum value
    index_max = maxRational(ra_num)
 
    # Print numerator and denominator
    print(str(ra_num[index_max].nume) + " " +
          str(ra_num[index_max].deno))
 
# This code is contributed by rutvik_56


C#
// C# program to find the maximum rational
// number in an array.
using System;
using System.Collections.Generic;
 
class GFG
{
 
public class Rational
{
 
    // numerator and Denominator
    public int nume, deno;
 
    public Rational(int nume, int deno)
    {
        this.nume = nume;
        this.deno = deno;
    }
         
};
 
// here we find the Denominator LCM
static int lcmOfDenominator(List ra_num)
{
    // get the first Denominator as lcm
    int lcm = ra_num[0].deno;
    int i;
 
    // find the lcm of all relational
    // number Denominator
    for (i = 1; i < ra_num.Count; i++)
        lcm = (lcm * (ra_num[i].deno)) /
                __gcd(lcm, ra_num[i].deno);
     
    // return the lcm
    return lcm;
}
 
static int maxRational(List ra_num)
{
    // take a temp array for find
    // maximum numerator after multiple
    int []temp = new int[ra_num.Count];
     
    // get here the lcm of all rational
    //number denominator
    int lcm = lcmOfDenominator(ra_num);
 
    // take maximum for get maximum index
    int maximum = 0;
    int maximumind = 0;
 
    // find the index which contain maximum value
    for (int i = 0; i < ra_num.Count; i++)
    {
 
        // divide lcm with denominator
        // and multiple with numerator
        temp[i] = (ra_num[i].nume) *
                  (lcm / ra_num[i].deno);
 
        // get the maximum numerator
        if (maximum < temp[i])
        {
            maximum = temp[i];
            maximumind = i;
        }
    }
 
    // return index which contain
    // maximum rational number
    return maximumind;
}
 
static int __gcd(int a, int b)
{
    if (b == 0)
        return a;
    return __gcd(b, a % b);
}
 
// Driver Code
public static void Main(String[] args)
{
    // given rational number
    List ra_num = new List();
                   ra_num.Add(new Rational( 1, 2 ));
                   ra_num.Add(new Rational( 2, 3 ));                        
                   ra_num.Add(new Rational( 3, 4 ));                        
                   ra_num.Add(new Rational( 4, 5 ));                        
 
    // get the index which contain maximum value
    int index_max = maxRational(ra_num);
 
    // print numerator and denominator
    Console.WriteLine(ra_num[index_max].nume +
                " " + ra_num[index_max].deno);
    }
}
 
// This code is contributed by PrinciRaj1992


输出:

4 5