Как переделать этот код под динамическую память?

69
11 февраля 2022, 12:10

Даны натуральное число n и целочисленная матрица [aij]i,j=1, ... ,n. Получить b1, b2, ..., bn, где bi – это max aij min aji 1<=j<=n 1<=j<=n Сам код:

#include <iostream>
using namespace std;
int max (int a[100][100], int b[100] , int size)
{
    for (int j = 0; j < (size); j++)
    {
        for (int i = 1; i < (size); i++)
        {
            int k = 0;
            if (a[k][j] <= a[i][j])
            {
                k = i;
            }
            b[j]  = a[k][j];
        }
    }
    return b[100];
}

int min (int a[100][100], int b[100] , int size)
{
    for (int i = 0; i < (size); i++)
    {
        for (int j = 1; j < (size); j++)
        {
            int k = 0;
            if (a[i][k] >= a[i][j])
            {
                k = j;
            }
            b[i]  = a[i][k];
        }
    }
    return b[100];
}

int main()
{
    int n;
    int array[100][100];
    int  maxi[100];
    int mini[100];
    cin >> n;
    for(int i = 0; i < n; i++ )
    {
        for(int j = 0; j < n; j++ )
            cin >> array[i][j]; // ввели массив
        //cout <<"   "<<  endl;
    }
//функция ищущая максимум в столбце (записывает значения в новый массив)
max (array, maxi, n);
//функция ищущая минимум в строке (записывает значения в новый массив)
min (array, mini, n);
//вывод массивов поочередности

    for (int u = 0; u < n; u++)
        cout <<" B." << u + 1 <<" = " << maxi[u] <<"   "<< mini[u] << endl;
    return 0;
}                               
Answer 1

Для начала, заданные условия трудно понять. В процессе написания кода я, кажется, разобрался по комментариям к min и max, что требуется.

Учитывая, что матрица квадратная, то есть x == y, находим максимум в каждом столбце и минимум в каждой строке матрицы.

#include <iostream>

void max(const int* const* const& matrix, int* const& result, const size_t& n) {
    for (size_t x = 0; x < n; x++) {
        size_t k = 0;
        for (size_t y = 0; y < n; y++)
            if (matrix[y][x] >= matrix[k][x])
                k = y;
        result[x] = matrix[k][x];
    }
}

void min(const int* const* const& matrix, int* const& result, const size_t& n) {
    for (size_t y = 0; y < n; y++) {
        size_t k = 0;
        for (size_t x = 0; x < n; x++)
             if (matrix[y][x] <= matrix[y][k])
                k = x;
        result[y] = matrix[y][k];
    }
}

int main() {
    int** matrix;
    int* max_store;
    int* min_store;
    size_t n;
    std::cin >> n;
    matrix = new int*[n];
    max_store = new int[n];
    min_store = new int[n];
    for (size_t i = 0; i < n; i++) {
        matrix[i] = new int[n];
        for (size_t j = 0; j < n; j++)
            std::cin >> matrix[i][j]; // ввели массив
    }
    max(matrix, max_store, n);
    min(matrix, min_store, n);
    for (size_t iteration = 0; iteration < n; iteration++)
        std::cout << "B." << iteration << ": " << max_store[iteration] << " " << min_store[iteration] << std::endl;
}

На вводе ожидается что-то в виде:

3
4 3 2
7 1 23
9 10 11

На выходе получится:

B.1: 9 2
B.2: 10 1
B.3: 23 9
READ ALSO
Нужна помощь с реализацией алгоритма Габова для нахождения кратчайших путей с помощью масштабирования

Нужна помощь с реализацией алгоритма Габова для нахождения кратчайших путей с помощью масштабирования

Нужна помощь с написанием программы на С++, а именно алгоритма Габова нахождения кратчайших путей с помощью масштабированияВся сложность...

109
Утечка памяти при создании двумерного массива

Утечка памяти при создании двумерного массива

Я в бесконечном цикле создаю массив векторов, которые заполняю значениями (значения типа double), в конце прохода цикла я освобождаю память под...

110
Криво стоит slick slider

Криво стоит slick slider

Всего на сайте 4 слайдера, интересует второй в секции "Реализованные объекты"

93
Javafx. Удаление строки из TableView и MySQL

Javafx. Удаление строки из TableView и MySQL

Нужно реализовать удаление строки из базы данных при вводе номера этой строки (id_depositor) в текстовое поле id_depositorFieldДобавление новых записей...

213