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

Máu cuối cùng nhỏ nhất có thể của quái vật cuối cùng trong game C++


Đề bài

Cho N quái vật, mỗi quái vật có máu ban đầu h[i] là số nguyên. Quái vật còn sống nếu máu > 0.

Mỗi lượt một quái vật ngẫu nhiên giết quái vật ngẫu nhiên khác, quái vật bị tấn công máu giảm đi lượng máu của quái vật tấn công. Quá trình tiếp tục cho đến khi chỉ còn một quái vật. Máu nhỏ nhất có thể của quái vật cuối cùng là bao nhiêu?

Ví dụ

Nếu mảng đầu vào là {2, 14, 28, 56} thì đầu ra sẽ là 2 vì khi chỉ quái vật đầu tiên liên tục tấn công 3 quái vật còn lại, máu cuối cùng của quái vật cuối cùng sẽ là 2, là nhỏ nhất.

Thuật toán

Chúng ta có thể得到 câu trả lời cuối cùng bằng công thức GCD sau:

H(min) = gcd(h1, h2, ..., hn)

Ví dụ

#include <iostream>
using namespace std;
int gcd(int a, int b) {
    if (a == 0) return b;
    return gcd(b % a, a);
}
int getPossibleHealth(int* health, int n) {
    int currentGcd = gcd(health[0], health[1]);
    for (int i = 2; i < n; ++i) {
        currentGcd = gcd(currentGcd, health[i]);
    }
    return currentGcd;
}
int main() {
    int health[] = { 4, 6, 8, 12 };
    int n = sizeof(health) / sizeof(health[0]);
    cout << "Máu cuối cùng có thể = " << getPossibleHealth(health, n) << endl;
    return 0;
}

Kết quả

Khi bạn biên dịch và thực thi chương trình trên. Nó tạo ra kết quả sau:

Máu cuối cùng có thể = 2