C矩阵中两行元素之和的最大差

我们得到一个矩阵,任务是找到矩阵两行中元素之和之间的最大差。假设我们有一个矩阵M [i,j],其中包含i行和j列。令行为R 0至R i-1。差值将通过减去(R y的元素之)-(R x的元素之和)来计算,其中x <y。

现在让我们使用示例了解我们必须做的事情-

输入项 

M[4][4] = {

   { 1,2,0,5 },

   {0,1,1,0},

   {7,2,3,2}

   {1,2,4,1}};

输出结果 

Maximum difference here is : 12

解释-在这里,第2行的元素之和最大为14,而第1行的元素之和最小为2。因此,最大差为14-2 = 12。

输入项 

M[4][4] = {

   { 0,2,0,5 },

   {0,1,4,0},

   {1,2,3,2}

   {2,2,6,0}};

输出结果 

Maximum difference here is : 5

说明-第4行的元素之和最大为10,第2行的元素之和最小值为5。因此,最大差为10-5 = 10

在以下程序中使用的方法如下

  • 输入矩阵中的行数和列数,以使其至少具有两行。

  • 在该rowmaxd()函数中,我们传递输入矩阵及其行数和列数,并返回行总和的最大差。

  • 在这里,我们首先将矩阵M [row] [col]的每一行的元素总和存储在名为RSum [i]的数组中。注意,RSum [row]的长度取决于M [row] [col]中的行数。

  • 然后,我们将MD假定为RSum [1] -RSum [0]之间的最大差。其中RSum [0]是第0行的所有元素的总和,而RSums [1]是第1行的所有元素的总和。

  • 我们还假设RSum [0]至少在RSum [row]中,并将其存储在MIN变量中。

  • 在从0到i的for循环中,我们将遍历每个RSum [row]并比较RSum [i] -MIN> MD之间的差异。如果是这样,请更新MD。否则检查RSum [row] <MIN并分别更新MIN。

示例

#include<stdio.h>

#define MAX 100

//创建函数以计算两行元素之和之间的最大差,例如

that second row appears before the first

int rowmaxd(int M[][MAX], int row, int col){

   //用于存储每行元素的总和

   int RSum[row];

   for(int i=0;i<row;i++){

      int sum=0;

      for(int j=0;j<col;j++)

         sum+=M[i][j];

      RSum[i]=sum;

   }

   //calculate now max difference between two elements of RSum such that in RSum[j]-RSum[i], i<j

   int MD=RSum[1]-RSum[0];

   int MIN=RSum[0];

   for (i = 1; i < row; i++){

      //如果此差异大于MD,则更新MD-

      if(RSum[i]-MIN>MD)

         MD=RSum[i]-MIN;

      //如果此值甚至小于MIN,则更新MIN-

      if(RSum[i]<MIN)

         MIN=RSum[i];

   }

   return MD;

}

//驱动程序

int main(){

   int r = 5, c = 4;

   int mat[][MAX] = {

      {-1, 2, 3, 4},

      {6, 3, 0, 1},

      {-1, 7, 8, -3},

      {3, 5, 1, 4},

      {2, 1, 1, 0}};

   cout<<”Maximum difference of sum of elements in two rows in a matrix is: ”<<rowmaxd(mat, r, c);

   return 0;

}

输出结果

如果运行上面的代码,我们将获得以下输出-

Maximum difference of sum of elements in two rows in a matrix: 5

以上是 C矩阵中两行元素之和的最大差 的全部内容, 来源链接: utcz.com/z/326889.html

回到顶部