Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จำนวนตรรกยะสูงสุด (หรือเศษส่วน) จากอาร์เรย์ใน C++


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