给定有理数,任务是找到最大有理数。
例子:
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