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