Computer >> Máy Tính >  >> Lập trình >> lập trình C

Hiệu số lớn nhất của tổng các phần tử trong hai hàng trong ma trận trong C


Chúng ta được cung cấp một ma trận và nhiệm vụ là tìm ra hiệu số lớn nhất giữa tổng các phần tử trong hai hàng của ma trận. Giả sử chúng ta có một ma trận M [i, j] với i hàng và j cột. Đặt các hàng là R 0 tới R i-1 . Sự khác biệt sẽ được tính bằng cách trừ đi (tổng các phần tử của R y ) - (tổng các phần tử của R x ), trong đó x

Bây giờ chúng ta hãy hiểu những gì chúng ta phải làm bằng cách sử dụng một ví dụ -

Đầu vào

M[4][4] = {
   { 1,2,0,5 },
   {0,1,1,0},
   {7,2,3,2}
   {1,2,4,1}};

Đầu ra

Maximum difference here is : 12

Giải thích - Ở đây tổng các phần tử của Hàng 2 là tối đa là 14 và tổng các phần tử của Hàng 1 là nhỏ nhất, đó là 2. Vì vậy, hiệu số lớn nhất là 14-2 =12.

Đầu vào

M[4][4] = {
   { 0,2,0,5 },
   {0,1,4,0},
   {1,2,3,2}
   {2,2,6,0}};

Đầu ra

Maximum difference here is : 5

Giải thích - Ở đây tổng các phần tử của Hàng 4 lớn nhất là 10 và tổng các phần tử của Hàng 2 là nhỏ nhất, đó là 5. Vì vậy, hiệu số lớn nhất là 10-5 =10

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Lấy đầu vào cho số hàng và cột trong ma trận sao cho ma trận có ít nhất hai hàng.

  • Trong hàm rowmaxd (), chúng ta đang chuyển ma trận đầu vào và đó là số hàng và số cột và trả về sự khác biệt lớn nhất của tổng các hàng.

  • Ở đây đầu tiên chúng ta sẽ lưu trữ tổng các phần tử của mỗi hàng của ma trận M [row] [col] trong một mảng có tên là RSum [i]. Lưu ý rằng RSum [row] có độ dài theo số hàng trong M [row] [col].

  • Sau đó, chúng tôi sẽ giả sử MD là sự khác biệt lớn nhất giữa RSum [1] -RSum [0]. Ở đây RSum [0] là tổng của tất cả các phần tử của hàng 0 và RSums [1] là tổng của tất cả các phần tử của hàng 1.

  • Ngoài ra, chúng tôi giả định rằng RSum [0] ít nhất trong RSum [hàng] và lưu trữ nó trong biến MIN.

  • Trong vòng lặp for từ 0 đến i, chúng ta sẽ duyệt qua từng RSum [hàng] và so sánh sự khác biệt giữa RSum [i] -MIN> MD. Nếu đúng như vậy, hãy cập nhật MD. Kiểm tra khác là RSum [hàng]

Ví dụ

#include<stdio.h>
#define MAX 100
//create function to calculate maximum difference between sum of elements of two rows such
that second row appears before the first
int rowmaxd(int M[][MAX], int row, int col){
   //for storing sum of elements of each row
   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++){
      //if this difference is more than MD,the update MD
      if(RSum[i]-MIN>MD)
         MD=RSum[i]-MIN;
      //if this value is even less than MIN,then update MIN
      if(RSum[i]<MIN)
         MIN=RSum[i];
   }
   return MD;
}
// Driver program
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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, chúng ta sẽ nhận được kết quả sau -

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