дано квадратную матрицу А размером n x n. Заполнить одномерный массив B c++

101
09 сентября 2021, 04:00

Нужно ваша помощь по задаче на с++.

Вот сама задача.

дано квадратную матрицу А размером n x n. Заполнить одномерный массив B долями от деления наименьшего значения в i-м столбце матрицы А на наибольшее значение в i-й строчке.

Почему то не получается( Вот код

#include  <iostream>
#include  <cstdlib>
#include <iomanip> 
using namespace std;
int main()
{
    int n;
    cout << "Order of matrix A: ";
    cin >> n;
    int** A = new int* [n];
    for (int i = 0; i < n; i++)
        A[i] = new int[n];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            A[i][j] = rand() % 100;
            cout << setw(3) << A[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl;
    int** B = new int* [n];
    for (int i = 0; i < n; i++)
        B[i] = new int[n];
    int * r = new int[n];
    int * c = new int[n];
    for (int i = 0; i < n; i++)
    {
        r[i] = c[i] = INT_MIN;
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (A[i][j] > r[i]) r[i] = A[i][j];
            if (A[i][j] > c[j]) c[j] = A[i][j];
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            B[i][j] = (r[i] > c[j]) ? r[i] : c[j];
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << setw(3) << B[i][j] << " ";

        }
        cout << endl;
    }
    cout << endl;

    delete[] r;
    delete[] c;
    for (int i = 0; i < n; i++)
    {
        delete[] A[i];
        delete[] B[i];
    }
    delete[] A;
    delete[] B;
    system("pause");
    return 0;
}

Буду благодарен за помощь.

Answer 1

Вам нужно определить минимальный и максимальный элемент и инитилизировать результатом их деления одномерный массив. Для этого вам нужен массив элементов типа с плавающей точкой, а не массив указателей на целые. После того, как инициализировали массив и вывели на экран, выполнить нужно следующее:

double* B = new double[n];
int z = -1000, // or std::numeric_limits<int>::min();           
    a = 1000,  // or std::numeric_limits<int>::max();
    min{}, max{};
for (int i = 0; i < n; i++)
{           
    max = z;
    min = a;
    for (int j = 0; j < n; j++)
    {
        if (max < A[i][j])
            max = A[i][j];
        //учитывая, что матрица квадратная
        if (min > A[j][i])
            min = A[j][i];
    }
    B[i] = (double)min / max;
}

После можете вывести массив B, и нужно освобождать занимаемую память обеими массивами

READ ALSO
Bootstrap 4 выбор табов Select

Bootstrap 4 выбор табов Select

Доброе время суток господа, вопрос вроде и простой а вроде и сложный, необходимо выбирать стандартные bootstrap 4 табы выпадающим списком select,...

314
Несколько Select на странице

Несколько Select на странице

имеется несколько select обернутых в div на странице, необходимо чтобы при выборе внутри рядом стоящего div отображалась информация

174
Поиск в древовидной структуре

Поиск в древовидной структуре

Опытные коллеги кто сталкивался с такой древовидной структурой Bootstrap tree view как лучше всего организовать по ней поиск, если дерево очень большое,...

224
Cкрыть и показать картинку при клике

Cкрыть и показать картинку при клике

есть 4 блока в каждом из которых находится картинкаКаким образом можно сделать так чтобы изначально не было видно изображений во всех четырех...

128