矩阵中大于修改均值的元素数
通常矩阵的平均值是矩阵中所有元素的平均值。将修改后的平均值视为行最小值和列最大值的平均值的下限。行最小值是给定矩阵每一行的最小元素,列最大值是每一列的最大元素。给定一个 n*m 阶矩阵,找出大于所获得的新平均值的元素数。
mean = floor ( (sum(row-wise Min) + sum (col-wise Max )) /
(row_no. + col_no.) )
例子 :
Input : mat[][] = {1, 5, 6,
2, 3, 0,
5, 2, 8}
Output : 4
Input : mat[][] = {1, 5,
5, 2}
Output : 2
求所有行最小值之和和所有列最大值之和。通过将和值除以 (n+m) 即行和列的总数来取该总和的平均值。现在,由于我们得到了行最小值和列最大值的平均值,因此遍历矩阵以找到大于计算平均值的元素数。
下面是上述方法的实现:
C++
// CPP program to count number of
// elements greater than mean
#include
using namespace std;
// define constant for row and column
#define n 4
#define m 5
// function to count elements
// greater than mean
int countElements(int mat[][m])
{
// For each row find minimum
// element and add to rowSum
int rowSum = 0;
for (int i = 0; i < n; i++) {
int min = mat[i][0];
for (int j = 1; j < m; j++)
if (mat[i][j] < min)
min = mat[i][j];
rowSum += min;
}
// For each column find maximum
// element and add to colSum
int colSum = 0;
for (int i = 0; i < m; i++) {
int max = mat[0][i];
for (int j = 1; j < n; j++)
if (max < mat[j][i])
max = mat[j][i];
colSum += max;
}
// Calculate mean of row-wise
// minimum and column wise maximum
int mean = (rowSum + colSum) / (m + n);
// For whole matrix count
// elements greater than mean
int count = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (mean < mat[i][j])
count++;
return count;
}
// driver function
int main()
{
int mat[n][m] = { 5, 4, 2, 8, 7,
1, 5, 8, 3, 4,
8, 5, 4, 6, 0,
2, 5, 8, 9, 4 };
cout << countElements(mat);
return 0;
}
Java
// Java program to count
// number of elements
// greater than mean
class GFG {
static int n = 4, m = 5;
// function to count
// elements greater
// than mean
static int countElements(int mat[][])
{
// For each row find
// minimum element
// and add to rowSum
int rowSum = 0;
for (int i = 0; i < n; i++)
{
int min = mat[i][0];
for (int j = 1; j < m; j++)
if (mat[i][j] < min)
min = mat[i][j];
rowSum += min;
}
// For each column
// find maximum
// element and add
// to colSum
int colSum = 0;
for (int i = 0; i < m; i++) {
int max = mat[0][i];
for (int j = 1; j < n; j++)
if (max < mat[j][i])
max = mat[j][i];
colSum += max;
}
// Calculate mean of
// row-wise minimum
// and column wise
// maximum
int mean = (rowSum + colSum) / (m + n);
// For whole matrix
// count elements
// greater than mean
int count = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (mean < mat[i][j])
count++;
return count;
}
// driver function
public static void main(String[] args)
{
int mat[][] = {{ 5, 4, 2, 8, 7},
{1, 5, 8, 3, 4},
{8, 5, 4, 6, 0},
{2, 5, 8, 9, 4}};
System.out.println(countElements(mat));
}
}
// This article is contribute by Prerna Saini.
Python3
# Python3 program to count
# number of elements
# greater than mean
n = 4;
m = 5;
# Function to count
# elements greater
# than mean
def countElements(mat):
# For each row find
# minimum element
# and add to rowSum
rowSum = 0;
for i in range(n):
min = mat[i][0];
for j in range(1, m):
if (mat[i][j] < min):
min = mat[i][j];
rowSum += min;
# For each column
# find maximum
# element and add
# to colSum
colSum = 0;
for i in range(m):
max = mat[0][i];
for j in range(1, n):
if (max < mat[j][i]):
max = mat[j][i];
colSum += max;
# Calculate mean of
# row-wise minimum
# and column wise
# maximum
mean = ((rowSum + colSum) /
(m + n));
# For whole matrix
# count elements
# greater than mean
count = 0;
for i in range(n):
for j in range(m):
if (mean < mat[i][j]):
count += 1;
return count;
# Driver code
if __name__ == '__main__':
mat = [[5, 4, 2, 8, 7],
[1, 5, 8, 3, 4],
[8, 5, 4, 6, 0],
[2, 5, 8, 9, 4]];
print(countElements(mat));
# This code is contributed by 29AjayKumar
C#
// C# program to count number of
// elements greater than mean
using System;
class GFG {
static int n = 4, m = 5;
// function to count elements
// greater than mean
static int countElements(int [,]mat)
{
// For each row find minimum
// element and add to rowSum
int rowSum = 0;
for (int i = 0; i < n; i++)
{
int min = mat[i,0];
for (int j = 1; j < m; j++)
if (mat[i,j] < min)
min = mat[i,j];
rowSum += min;
}
// For each column find maximum
// element and add to colSum
int colSum = 0;
for (int i = 0; i < m; i++) {
int max = mat[0,i];
for (int j = 1; j < n; j++)
if (max < mat[j,i])
max = mat[j,i];
colSum += max;
}
// Calculate mean of row-wise minimum
// and column wise maximum
int mean = (rowSum + colSum) / (m + n);
// For whole matrix count
// elements greater than mean
int count = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (mean < mat[i,j])
count++;
return count;
}
// Driver function
public static void Main()
{
int [,]mat = {{5, 4, 2, 8, 7},
{1, 5, 8, 3, 4},
{8, 5, 4, 6, 0},
{2, 5, 8, 9, 4}};
Console.Write(countElements(mat));
}
}
// This article is contribute by nitin mittal.
PHP
Javascript
输出:
11