Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tìm max giữa x^(y^2) và y^(x^2) với x, y cho trước trong C++


Cho hai giá trị x và y. Nhiệm vụ: tìm giá trị lớn hơn giữa x^(y^2) và y^(x^2).

Ví dụ:

Đầu vào: x = 4, y = 3

Đầu ra: 3^(4^2)

Giải thích:

x^(y^2) = 4^(3^2) = 4^9 = 262144
y^(x^2) = 3^(4^2) = 3^16 = 43046721

Phương pháp giải

Cách đơn giản là tính cả hai giá trị và so sánh, nhưng không hiệu quả với số lớn.

Cách tối ưu: dùng logarit tự nhiên (ln):

ln(x^(y^2)) = (y^2) * ln(x)

ln(y^(x^2)) = (x^2) * ln(y)

Chia cả hai cho (x^2)*(y^2) để so sánh:

ln(x) / (x^2) và ln(y) / (y^2)

Giá trị này nghịch biến với kết quả. Nếu x > y thì x^(y^2) < y^(x^2).

Chương trình minh họa

Ví dụ

#include <iostream>
using namespace std;

bool checkGreaterVal(int x, int y) {
    if (x > y)
        return false;
    else
        return true;
}

int main() {
    int x = 3;
    int y = 5;
    cout << "The greater value is ";
    if (checkGreaterVal(x, y))
        cout << x << "^(" << y << "^2)";
    else
        cout << y << "^(" << x << "^2)";
    return 0;
}

Kết quả

The greater value is 3^(5^2)