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

Tìm số phần tử vị trí (positional elements) trong ma trận C++

Giới thiệu

Cho ma trận mat[n][m]. Phần tử gọi là "positional" nếu nó là lớn nhất hoặc nhỏ nhất trong hàng hoặc cột của nó. Đếm số phần tử như vậy.

Ví dụ minh họa

Đầu vào

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

Đầu ra

8

Giải thích

Các phần tử positional: 2, 5, 7 (hàng 0), 1, 4 (hàng 1), 5, 1, 3 (hàng 2).

Phương pháp giải

Tính trước max/min của mỗi hàng và mỗi cột, sau đó duyệt ma trận kiểm tra điều kiện.

Chương trình minh họa

#include <iostream>
using namespace std;
const int MAX = 100;

int countAllPositionalElements(int mat[][MAX], int m, int n) {
    int rowmax[m], rowmin[m];
    int colmax[n], colmin[n];

    for (int i = 0; i < m; i++) {
        int rminn = 10000, rmaxx = -10000;
        for (int j = 0; j < n; j++) {
            if (mat[i][j] > rmaxx) rmaxx = mat[i][j];
            if (mat[i][j] < rminn) rminn = mat[i][j];
        }
        rowmax[i] = rmaxx; rowmin[i] = rminn;
    }

    for (int j = 0; j < n; j++) {
        int cminn = 10000, cmaxx = -10000;
        for (int i = 0; i < m; i++) {
            if (mat[i][j] > cmaxx) cmaxx = mat[i][j];
            if (mat[i][j] < cminn) cminn = mat[i][j];
        }
        colmax[j] = cmaxx; colmin[j] = cminn;
    }

    int positionalCount = 0;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (mat[i][j] == rowmax[i] || mat[i][j] == rowmin[i] ||
                mat[i][j] == colmax[j] || mat[i][j] == colmin[j])
                positionalCount++;
        }
    }
    return positionalCount;
}

int main() {
    int mat[][MAX] = { {2, 5, 7}, {1, 3, 4}, {5, 1, 3} };
    int m = 3, n = 3;
    cout << "Number of positional elements is " << countAllPositionalElements(mat, m, n);
    return 0;
}

Đầu ra

Number of positional elements is 8