เราได้รับเมทริกซ์ และงานคือหาความต่างมากที่สุดระหว่างผลรุมขององค์ประกอบในสองแถวของเมทริกซ์ สมมติเรามีเมทริกซ์ M[i,j] ด้วย i แถวและ j คอลัมน์ ให้แถวเป็น R0 ถึง Ri-1 ความต่างจะคำนวณโดยลบ (ผลรวมองค์ประกอบของ Ry) - (ผลรวมองค์ประกอบของ Rx) โดยที่ x < y
ตัวอย่าง
อินพุต
M[4][4] = {
{ 1, 2, 0, 5 },
{ 0, 1, 1, 0 },
{ 7, 2, 3, 2 },
{ 1, 2, 4, 1 }
};
เอาต์พุต — ความต่างสูงสุดที่นี่คือ: 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 }
};
เอาต์พุต — ความต่างสูงสุดที่นี่คือ: 5
วิธีการที่ใช้ในโปรแกรม
- รับอินพุตจำนวนแถวและคอลัมน์ในเมทริกซ์ที่มีอย่างน้อยสองแถว
- ในฟังก์ชัน rowmaxd() ส่งเมทริกซ์อินพุตและจำนวนแถว คอลัมน์ และคืนค่าความต่างสูงสุดของผลรวมแถว
- ก่อนอื่น เก็บผลรวมองค์ประกอบของแต่ละแถวของเมทริกซ์ M[row][col] ในอาร์เรย์ชื่อ RSum[i] หมายเหตุว่า RSum[row] มีความยาวตามจำนวนแถวใน M[row][col]
- สมมติ MD เป็นความต่างสูงสุดระหว่าง RSum[1] - RSum[0] โดย RSum[0] คือผลรวมองค์ประกอบแถว 0 และ RSum[1] คือผลรวมแถว 1
- สมมติว่า RSum[0] น้อยที่สุดใน RSum[row] และเก็บในตัวแปร MIN
- ในลูป for จาก 0 ถึง i วนแต่ละ RSum[row] และเปรียบเทียบความต่างระหว่าง RSum[i] - MIN > MD ถ้าใช่ อัปเดต MD ไม่งั้นเช็ค RSum[row] < MIN และอัปเดต MIN แยกต่างหาก
ตัวอย่างโค้ด
#include <stdio.h>
#define MAX 100
// ฟังก์ชันคำนวณความต่างสูงสุดระหว่างผลรวมองค์ประกอบสองแถวที่แถวที่สองอยู่ก่อนแถวแรก
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;
}
// คำนวณความต่างสูงสุดระหว่างสององค์ประกอบของ RSum ที่ RSum[j] - RSum[i], i < j
int MD = RSum[1] - RSum[0];
int MIN = RSum[0];
for (int 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 << "ความต่างสูงสุดของผลรวมองค์ประกอบในสองแถวในเมทริกซ์คือ: " << rowmaxd(mat, r, c);
return 0;
}
ผลลัพธ์
หากรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้ —
ความต่างสูงสุดของผลรวมองค์ประกอบในสองแถวในเมทริกซ์: 5