我们得到一个矩阵,任务是找到矩阵两行中元素之和之间的最大差。假设我们有一个矩阵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