📜  执行指定操作后矩阵中的最大强度

📅  最后修改于: 2021-09-02 06:29:43             🧑  作者: Mango

给定一个包含 { 0 , 1 , # } 的N * M矩阵。任务是根据以下规则找到强度的最大值:

  1. 初始强度为零
  2. 如果遇到0 ,则强度降低 2。
  3. 如果遇到1 ,则强度增加 5。
  4. 如果遇到# ,则跳转到新行的开头而不会失去任何强度。

注意:您必须从左到右以自上而下的顺序遍历矩阵的每一行。
例子:

Input:
      {{1, 0, 1, 0},
       {0, #, 0, 0},
       {1, 1, 0, 0},
       {0, #, 1, 0}}

Output: 14
Explanation:
Here you starts with strength S = 0.

For the first row {1, 0, 1, 0}:
After {1} -> S = S + 5 = 5
After {0} -> S = S - 2 = 3
After {1} -> S = S + 5 = 8
After {0} -> S = S - 2 = 6

For the Second row {0, #, 0, 0}:
After {0} -> S = S - 2 = 4
After {#} -> Jump to next row.

For the Third row {1, 1, 0, 0}:
After {1} -> S = S + 5 = 9
After {1} -> S = S + 5 = 14
After {0} -> S = S - 2 = 12
After {0} -> S = S - 2 = 10

For the Fourth row {0, #, 1, 0}:
After {0} -> S = S - 2 = 8
After {#} -> Jump to next row.

So, The maximum value of S is 14 

方法:

  1. 从 i = [0, N], j = [0, M] 遍历矩阵 mat[][] 并检查:
If mat[i][j] = 0 then, S = S - 2.
If mat[i][j] = 1 then, S = S + 5.
If mat[i][j] = # then, jump to the next row.
  1. 在每一步存储到现在的最大强度值,并在最后打印强度。

下面是上述方法的实现:

C++
// C++ program for the above approach
 
#include 
using namespace std;
 
// Function return the Maximum
// value of the strength
void MaxStrength(char mat[100][100],
                 int n, int m)
{
    int S = 0;
    int ans = 0;
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
 
            char Curr = mat[i][j];
 
            // If current element
            // is 1
            if (Curr == '1') {
                S += 5;
            }
            // If current element
            // is 0
            if (Curr == '0') {
                S -= 2;
            }
            // If current element
            // is '#'
            if (Curr == '#') {
                break;
            }
 
            // Store the value of
            // maximum strength
            // till now
            ans = max(ans, S);
        }
    }
 
    cout << ans;
 
    return;
}
 
// Driver code
int main()
{
    int N = 4;
    int M = 4;
    char Mat[100][100]{ { '1', '0', '1', '0' },
                        { '0', '#', '0', '0' },
                        { '1', '1', '0', '0' },
                        { '0', '#', '1', '0' } };
 
    MaxStrength(Mat, N, M);
 
    return 0;
}


Java
// Java program for the above approach
import java.io.*;
 
class GFG{
 
// Function return the maximum
// value of the strength
static void MaxStrength(char[][] mat,
                        int n, int m)
{
    int S = 0;
    int ans = 0;
 
    for(int i = 0; i < n; i++)
    {
       for(int j = 0; j < m; j++)
       {
          char Curr = mat[i][j];
           
          // If current element
          // is 1
          if (Curr == '1')
          {
              S += 5;
          }
           
          // If current element
          // is 0
          if (Curr == '0')
          {
              S -= 2;
          }
           
          // If current element
          // is '#'
          if (Curr == '#')
          {
              break;
          }
           
          // Store the value of
          // maximum strength
          // till now
          ans = Math.max(ans, S);
       }
    }
    System.out.println(ans);
    return;
}
 
// Driver code
public static void main (String[] args)
{
    int N = 4;
    int M = 4;
    char[][] Mat = { { '1', '0', '1', '0' },
                     { '0', '#', '0', '0' },
                     { '1', '1', '0', '0' },
                     { '0', '#', '1', '0' } };
 
    MaxStrength(Mat, N, M);
}
}
 
// This code is contributed by shubhamsingh10


Python3
# python3 program for the above approach
 
# Function return the Maximum
# value of the strength
def MaxStrength(mat, n, m):
    S = 0
    ans = 0
 
    for i in range(n):
        for j in range(m):
            Curr = mat[i][j]
 
            # If current element
            # is 1
            if (Curr == '1'):
                S += 5
                 
            # If current element
            # is 0
            if (Curr == '0'):
                S -= 2
                 
            # If current element
            # is '#'
            if (Curr == '#'):
                break
 
            # Store the value of
            # maximum strength
            # till now
            ans = max(ans, S)
 
    print(ans)
    return
 
# Driver code
if __name__ == '__main__':
     
    N = 4;
    M = 4;
    Mat = [ ['1', '0', '1', '0'],
            ['0', '#', '0', '0'],
            ['1', '1', '0', '0'],
            ['0', '#', '1', '0'] ]
             
    MaxStrength(Mat, N, M)
 
# This code is contributed by Samarth


C#
// C# program for the above approach
using System;
 
class GFG{
 
// Function return the maximum
// value of the strength
static void MaxStrength(char[,] mat,
                        int n, int m)
{
    int S = 0;
    int ans = 0;
 
    for(int i = 0; i < n; i++)
    {
       for(int j = 0; j < m; j++)
       {
          char Curr = mat[i, j];
           
          // If current element
          // is 1
          if (Curr == '1')
          {
              S += 5;
          }
           
          // If current element
          // is 0
          if (Curr == '0')
          {
              S -= 2;
          }
           
          // If current element
          // is '#'
          if (Curr == '#')
          {
              break;
          }
           
          // Store the value of
          // maximum strength
          // till now
          ans = Math.Max(ans, S);
       }
    }
    Console.WriteLine(ans);
    return;
}
 
// Driver code
public static void Main(String[] args)
{
    int N = 4;
    int M = 4;
    char[,] Mat = { { '1', '0', '1', '0' },
                    { '0', '#', '0', '0' },
                    { '1', '1', '0', '0' },
                    { '0', '#', '1', '0' } };
 
    MaxStrength(Mat, N, M);
}
}
 
// This code is contributed by sapnasingh4991


Javascript


输出:
14

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live