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

หาเซตย่อยที่มีค่าเฉลี่ยเรขาคณิต (Geometric Mean) สูงสุดใน C++

ที่นี่เรามีอาร์เรย์ A ที่มีสมาชิกบางส่วน ภารกิจของเราคือหาเซตย่อย (Subset) ที่ค่าเฉลี่ยเรขาคณิตสูงสุด สมมติ A = [1, 5, 7, 2, 0] เซตย่อยที่มีค่าเฉลี่ยเรขาคณิตสูงสุดจะเป็น [5, 7]

เพื่อแก้ปัญหานี้ เราจะใช้เทคนิคหนึ่ง เราจะไม่หาค่าเฉลี่ย เพราะเรารู้ว่าสมาชิกสองตัวที่ใหญ่ที่สุดจะให้ค่าเฉลี่ยเรขาคณิตสูงสุด ดังนั้น สองสมาชิกที่ใหญ่ที่สุดจะถูกคืนค่าเป็นเซตย่อย

ตัวอย่างโค้ด

#include <iostream>
using namespace std;

void largestGeoMeanSubset(int arr[], int n) {
    if (n < 2) {
        cout << "Very few number of elements";
        return;
    }
    int max = INT_MIN, second_max = INT_MIN;
    for (int i = 0; i < n; i++) {
        if (arr[i] > max) {
            second_max = max;
            max = arr[i];
        } else if (arr[i] > second_max)
            second_max = arr[i];
    }
    cout << second_max << ", " << max;
}

int main() {
    int arr[] = {1, 5, 7, 2, 0};
    int n = sizeof(arr) / sizeof(arr[0]);
    largestGeoMeanSubset(arr, n);
}

ผลลัพธ์

5, 7