给定n个元素的数组,我们需要找到数字的几何平均值。通常,n个数的几何平均值是其乘积的第n个根。
If there are n elements x1, x2, x3, . . ., xn
in an array and if we want to calculate the
geometric mean of the array elements is
Geometric mean = (x1 * x2 * x3 * . . . * xn)1/n
例子:
Input : arr[] = {1, 2, 3, 4, 5, 6, 7, 8}
Output : 3.76435
= (1 * 2 * 3 * 4 * 5 * 6 * 7 * 8)1/8
= 403201/8
= 3.76435
Input : arr[] = {15, 12, 13, 19, 10}
Output : 13.447
= (15 * 12 * 13 * 19 * 10)1/5
= 4446001/5
= 13.477
一个简单的解决方案是先将所有数字相乘,然后求出乘数的(1 / n)次方。
C++
// Program to calculate the geometric mean
// of the given array elements.
#include
using namespace std;
// function to calculate geometric mean
// and return float value.
float geometricMean(int arr[], int n)
{
// declare product variable and
// initialize it to 1.
float product = 1;
// Compute the product of all the
// elements in the array.
for (int i = 0; i < n; i++)
product = product * arr[i];
// compute geometric mean through formula
// pow(product, 1/n) and return the value
// to main function.
float gm = pow(product, (float)1 / n);
return gm;
}
// Driver function
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << geometricMean(arr, n);
return 0;
}
Java
// Program to calculate the geometric mean
// of the given array elements.
import java.math.*;
class GFG{
// function to calculate geometric mean
// and return float value.
static float geometricMean(int arr[], int n)
{
// declare product variable and
// initialize it to 1.
float product = 1;
// Compute the product of all the
// elements in the array.
for (int i = 0; i < n; i++)
product = product * arr[i];
// compute geometric mean through
// formula pow(product, 1/n) and
// return the value to main function.
float gm = (float)Math.pow(product, (float)1 / n);
return gm;
}
// Driver function
public static void main(String args[])
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
int n = arr.length ;
System.out.println(geometricMean(arr, n));
}
}
/*This code is contributed by Nikita Tiwari*/
Python
# Python Program to calculate the
# geometric mean of the given
# array elements.
import math
# function to calculate geometric
# mean and return float value.
def geometricMean(arr, n) :
# declare product variable and
# initialize it to 1.
product = 1
# Compute the product of all the
# elements in the array.
for i in range(0,n) :
product = product * arr[i]
# compute geometric mean through
# formula pow(product, 1/n) and
# return the value to main function.
gm = (float)(math.pow(product, (1 / n)))
return (float)(gm)
# Driver function
arr = [ 1, 2, 3, 4, 5, 6, 7, 8]
n = len(arr)
# to print 6 digits after decimal
print ('{0:.6f}'.format(geometricMean(arr, n)))
# This code is contributed by Nikita Tiwari
C#
// Program to calculate the geometric mean
// of the given array elements.
using System;
class GFG{
// function to calculate geometric mean
// and return float value.
static float geometricMean(int []arr, int n)
{
// declare product variable and
// initialize it to 1.
float product = 1;
// Compute the product of all the
// elements in the array.
for (int i = 0; i < n; i++)
product = product * arr[i];
// compute geometric mean through
// formula pow(product, 1/n) and
// return the value to main function.
float gm = (float)Math.Pow(product, (float)1 / n);
return gm;
}
// Driver function
public static void Main()
{
int []arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
int n = arr.Length ;
Console.WriteLine(geometricMean(arr, n));
}
}
/*This code is contributed by vt_m*/
PHP
C++
// Program to calculate the geometric mean
// of the given array elements.
#include
using namespace std;
// function to calculate geometric mean
// and return float value.
float geometricMean(int arr[], int n)
{
// declare sum variable and
// initialize it to 1.
float sum = 0;
// Compute the sum of all the
// elements in the array.
for (int i = 0; i < n; i++)
sum = sum + log(arr[i]);
// compute geometric mean through formula
// antilog(((log(1) + log(2) + . . . + log(n))/n)
// and return the value to main function.
sum = sum / n;
return exp(sum);
}
// Driver function
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
int n = sizeof(arr) / sizeof(arr[0]);
// function call
cout << geometricMean(arr, n);
return 0;
}
Java
// Java Program to calculate the geometric mean
// of the given array elements.
import java.io.*;
class GFG
{
// function to calculate geometric mean
// and return float value.
static float geometricMean(int []arr, int n)
{
// declare sum variable and
// initialize it to 1.
float sum = 0;
// Compute the sum of all the
// elements in the array.
for (int i = 0; i < n; i++)
sum = sum + (float)Math.log(arr[i]);
// compute geometric mean through formula
// antilog(((log(1) + log(2) + . . . + log(n))/n)
// and return the value to main function.
sum = sum / n;
return (float)Math.exp(sum);
}
// Driver function
public static void main (String[] args)
{
int []arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
int n = arr.length;
// function call
System.out.println(geometricMean(arr, n));
}
}
// This code is contributed by vt_m.
Python3
# Program to calculate the
# geometric mean of the
# given array elements.
import math
# function to calculate
# geometric mean and
# return float value.
def geometricMean(arr, n):
# declare sum variable and
# initialize it to 1.
sum = 0;
# Compute the sum of all
# the elements in the array.
for i in range(n):
sum = sum + math.log(arr[i]);
# compute geometric mean
# through formula antilog
# (((log(1) + log(2) + . .
# ... + log(n))/n)
# and return the value to
# main function.
sum = sum / n;
return math.exp(sum);
# Driver Code
arr= [ 1, 2, 3, 4, 5, 6, 7, 8 ];
n = len(arr);
# function call
print(geometricMean(arr, n));
# This code is contributed by mits.
C#
// Program to calculate the geometric mean
// of the given array elements.
using System;
class GFG {
// function to calculate geometric mean
// and return float value.
static float geometricMean(int []arr, int n)
{
// declare sum variable and
// initialize it to 1.
float sum = 0;
// Compute the sum of all the
// elements in the array.
for (int i = 0; i < n; i++)
sum = sum + (float)Math.Log(arr[i]);
// compute geometric mean through formula
// antilog(((log(1) + log(2) + . . . + log(n))/n)
// and return the value to main function.
sum = sum / n;
return (float)Math.Exp(sum);
}
// Driver function
public static void Main ()
{
int []arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
int n = arr.Length;
// function call
Console.WriteLine(geometricMean(arr, n));
}
}
// This code is contributed by vt_m.
PHP
输出:
3.76435
上面的解决方案只是导致溢出。更好的解决方案是使用日志。有n个数字,我们需要使用以下公式计算几何平均值:
Geometric mean = Antilog((log(x1) + log(x2) +
log(x3) + . . . + log(xn))/n)
为了在编程中计算Antilog,我们使用指数函数(exp()) 。
C++
// Program to calculate the geometric mean
// of the given array elements.
#include
using namespace std;
// function to calculate geometric mean
// and return float value.
float geometricMean(int arr[], int n)
{
// declare sum variable and
// initialize it to 1.
float sum = 0;
// Compute the sum of all the
// elements in the array.
for (int i = 0; i < n; i++)
sum = sum + log(arr[i]);
// compute geometric mean through formula
// antilog(((log(1) + log(2) + . . . + log(n))/n)
// and return the value to main function.
sum = sum / n;
return exp(sum);
}
// Driver function
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
int n = sizeof(arr) / sizeof(arr[0]);
// function call
cout << geometricMean(arr, n);
return 0;
}
Java
// Java Program to calculate the geometric mean
// of the given array elements.
import java.io.*;
class GFG
{
// function to calculate geometric mean
// and return float value.
static float geometricMean(int []arr, int n)
{
// declare sum variable and
// initialize it to 1.
float sum = 0;
// Compute the sum of all the
// elements in the array.
for (int i = 0; i < n; i++)
sum = sum + (float)Math.log(arr[i]);
// compute geometric mean through formula
// antilog(((log(1) + log(2) + . . . + log(n))/n)
// and return the value to main function.
sum = sum / n;
return (float)Math.exp(sum);
}
// Driver function
public static void main (String[] args)
{
int []arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
int n = arr.length;
// function call
System.out.println(geometricMean(arr, n));
}
}
// This code is contributed by vt_m.
Python3
# Program to calculate the
# geometric mean of the
# given array elements.
import math
# function to calculate
# geometric mean and
# return float value.
def geometricMean(arr, n):
# declare sum variable and
# initialize it to 1.
sum = 0;
# Compute the sum of all
# the elements in the array.
for i in range(n):
sum = sum + math.log(arr[i]);
# compute geometric mean
# through formula antilog
# (((log(1) + log(2) + . .
# ... + log(n))/n)
# and return the value to
# main function.
sum = sum / n;
return math.exp(sum);
# Driver Code
arr= [ 1, 2, 3, 4, 5, 6, 7, 8 ];
n = len(arr);
# function call
print(geometricMean(arr, n));
# This code is contributed by mits.
C#
// Program to calculate the geometric mean
// of the given array elements.
using System;
class GFG {
// function to calculate geometric mean
// and return float value.
static float geometricMean(int []arr, int n)
{
// declare sum variable and
// initialize it to 1.
float sum = 0;
// Compute the sum of all the
// elements in the array.
for (int i = 0; i < n; i++)
sum = sum + (float)Math.Log(arr[i]);
// compute geometric mean through formula
// antilog(((log(1) + log(2) + . . . + log(n))/n)
// and return the value to main function.
sum = sum / n;
return (float)Math.Exp(sum);
}
// Driver function
public static void Main ()
{
int []arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
int n = arr.Length;
// function call
Console.WriteLine(geometricMean(arr, n));
}
}
// This code is contributed by vt_m.
的PHP
输出:
3.76435