Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ผลต่างสูงสุดของผลรวมขององค์ประกอบในสองแถวในเมทริกซ์ใน C


เราได้รับเมทริกซ์และภารกิจคือการค้นหาความแตกต่างที่ยิ่งใหญ่ที่สุดระหว่างผลรวมขององค์ประกอบในสองแถวของเมทริกซ์ สมมติว่าเรามีเมทริกซ์ M[i,j] ที่มี i แถวและ j คอลัมน์ ให้แถวเป็น R0 ถึง Ri-1 . ส่วนต่างจะถูกคำนวณโดยการลบ (ผลรวมขององค์ประกอบของ Ry ) - (ผลรวมขององค์ประกอบของ Rx ) โดยที่ x

มาทำความเข้าใจสิ่งที่เราต้องทำโดยใช้ตัวอย่างกัน −

ป้อนข้อมูล

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 เราจะสำรวจแต่ละ RSum[row] และเปรียบเทียบความแตกต่างระหว่าง RSum[i]-MIN>MD หากเป็นเช่นนั้น ให้อัปเดต MD การตรวจสอบอื่นคือ RSum[row]

ตัวอย่าง

#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;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น เราจะได้ผลลัพธ์ดังต่อไปนี้ -

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