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

ค้นหาค่าต่ำสุดเพื่อกำหนดองค์ประกอบอาร์เรย์ทั้งหมดเพื่อให้ผลิตภัณฑ์อาร์เรย์มีค่ามากขึ้นใน C++


สมมติว่าเรามีอาร์เรย์ขององค์ประกอบ n อัปเดตองค์ประกอบทั้งหมดของอาร์เรย์ที่กำหนดให้เป็นค่าต่ำสุด x เช่น arr[i] =x ผลคูณของอิลิเมนต์ทั้งหมดในอาร์เรย์ใหม่นั้นมากกว่าผลคูณของอิลิเมนต์ทั้งหมดของอาร์เรย์เริ่มต้น โดยที่ i <=arr[i] <=10^10 และ 1 <=n <=10^5 ดังนั้นหากอาร์เรย์เป็นแบบ [4, 2, 1, 10, 6] ดังนั้น 4 เป็นองค์ประกอบที่เล็กที่สุด 4 * 4 * 4 * 4 * 4> 4 * 2 * 1 * 10 * 6

ดังที่เรารู้ว่าผลคูณขององค์ประกอบ n คือ P หากเราต้องหารากที่ n ของ P เพื่อหารากที่ n ของผลิตภัณฑ์ เราเพียงแค่แบ่ง n จากผลรวมของล็อกขององค์ประกอบ n ของอาร์เรย์ แล้วตามด้วยเพดานของแอนติล็อก จะเกิดผล

res =ceil(antilog(log(x) / 10))

หรือ res =ceil(10 ^ (log(x) / 10))

ตัวอย่าง

#include <iostream>
#include <cmath>
#define EPS 1e-15
using namespace std;
long long findMinValue(long long arr[], long long n) {
   long double sum = 0;
   for (int i=0; i<n; i++)
   sum += (long double)log10(arr[i])+EPS;
   long double xl = (long double)(sum/n+EPS);
   long double res = pow((long double)10.0, (long double)xl) + EPS;
   return (long long)ceil(res+EPS);
}
int main() {
   long long arr[] = {4, 2, 1, 10, 6};
   long long n = sizeof(arr)/sizeof(arr[0]);
   cout << "Min value is: "<< findMinValue(arr, n);
}

ผลลัพธ์

Min value is: 4