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

ค้นหาเซตย่อยที่มีค่าเฉลี่ยเรขาคณิตมากที่สุดใน C++


ที่นี่เรามีอาร์เรย์ A ที่มีองค์ประกอบบางอย่าง งานของเราคือการหาเซตย่อยที่ค่าเฉลี่ยเรขาคณิตมีค่าสูงสุด สมมติว่า 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