Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Hiệu tối đa tổng 2 hàng trong ma trận C

Cho ma trận M[row][col]. Tìm hiệu lớn nhất giữa tổng 2 hàng bất kỳ, trong đó hàng thứ 2 có chỉ số lớn hơn hàng thứ 1 (y > x).

Ví dụ

Đầu vào

M[4][4] = {
    { 1, 2, 0, 5 },
    { 0, 1, 1, 0 },
    { 7, 2, 3, 2 },
    { 1, 2, 4, 1 }
}

Đầu ra - Hiệu tối đa: 12

Giải thích - Hàng 2 (chỉ số 2): tổng = 14. Hàng 1 (chỉ số 1): tổng = 2. Hiệu = 14-2 = 12.

Đầu vào

M[4][4] = {
    { 0, 2, 0, 5 },
    { 0, 1, 4, 0 },
    { 1, 2, 3, 2 },
    { 2, 2, 6, 0 }
}

Đầu ra - Hiệu tối đa: 5

Phương pháp

  • Tính tổng từng hàng lưu vào mảng RSum[]
  • Khởi tạo MD = RSum[1] - RSum[0], MIN = RSum[0]
  • Duyệt i từ 1 đến row-1:
  • Nếu RSum[i] - MIN > MD → cập nhật MD
  • Nếu RSum[i] < MIN → cập nhật MIN
  • Trả về MD

Chương trình mẫu

#include <stdio.h>
#include <stdlib.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;
    }
    
    int MD = RSum[1] - RSum[0];
    int MIN = RSum[0];
    
    for (int i = 1; i < row; i++) {
        if (RSum[i] - MIN > MD)
            MD = RSum[i] - 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}
    };
    printf("Hiệu tối đa tổng 2 hàng: %d", rowmaxd(mat, r, c));
    return 0;
}

Kết quả

Hiệu tối đa tổng 2 hàng: 5