ปัญหา
ในปัญหานี้ เราได้รับอาร์เรย์ 2-D ที่มีจำนวนตรรกยะ (หนึ่งในแต่ละแถว) งานของเราคือสร้างโปรแกรมเพื่อคำนวณจำนวนตรรกยะสูงสุด (หรือเศษส่วน) จากอาร์เรย์ใน C++
คำอธิบายปัญหา - อาร์เรย์ 2-D เป็นรูปแบบ [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 คือ 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