📜  矩阵中大于修改均值的元素数

📅  最后修改于: 2022-05-13 01:57:23.441000             🧑  作者: Mango

矩阵中大于修改均值的元素数

通常矩阵的平均值是矩阵中所有元素的平均值。将修改后的平均值视为行最小值和列最大值的平均值的下限。行最小值是给定矩阵每一行的最小元素,列最大值是每一列的最大元素。给定一个 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