ในปัญหานี้ เราได้รับอาร์เรย์ 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