เราได้รับเมทริกซ์และภารกิจคือการค้นหาความแตกต่างที่ยิ่งใหญ่ที่สุดระหว่างผลรวมขององค์ประกอบในสองแถวของเมทริกซ์ สมมติว่าเรามีเมทริกซ์ M[i,j] ที่มี i แถวและ j คอลัมน์ ให้แถวเป็น R0 ถึง Ri-1 . ส่วนต่างจะถูกคำนวณโดยการลบ (ผลรวมขององค์ประกอบของ Ry ) - (ผลรวมขององค์ประกอบของ Rx ) โดยที่ x มาทำความเข้าใจสิ่งที่เราต้องทำโดยใช้ตัวอย่างกัน −
ป้อนข้อมูล
ผลผลิต
คำอธิบาย − ที่นี่ผลรวมขององค์ประกอบของแถวที่ 2 มีค่าสูงสุดที่ 14 และผลรวมขององค์ประกอบของแถวที่ 1 คือค่าต่ำสุด นั่นคือ 2 ดังนั้นความแตกต่างสูงสุดคือ 14-2=12
ป้อนข้อมูล
ผลผลิต
คำอธิบาย − ที่นี่ผลรวมขององค์ประกอบของแถวที่ 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]
หากเราเรียกใช้โค้ดข้างต้น เราจะได้ผลลัพธ์ดังต่อไปนี้ -M[4][4] = {
{ 1,2,0,5 },
{0,1,1,0},
{7,2,3,2}
{1,2,4,1}};
Maximum difference here is : 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
แนวทางที่ใช้ในโปรแกรมด้านล่างดังนี้
ตัวอย่าง
#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