เราได้รับเมทริกซ์และภารกิจคือการค้นหาความแตกต่างที่ยิ่งใหญ่ที่สุดระหว่างผลรวมขององค์ประกอบในสองแถวของเมทริกซ์ สมมติว่าเรามีเมทริกซ์ 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