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

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

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