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

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

ปัญหา

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