Многомерные массивы C++

Задание : В матрице Z(5,6) первый отрицательный элемент каждого столбца заменить суммой оставшихся. Отрицательные элементы до замены вывести в массив B. Вывести исходную и преобразованную матрицы, полученный массив.

int Z[N][M] = { {-1,-2,-3,-4,-5,-6},

                    { 2, 4, 3, 3, 1, 5},

                    { 2, 4, 3, 3, 1, 5},

                    { 2, 4, 3, 3, 1, 5},

                    { 2, 4, 3, 3, 1, 5} }, B[M], i, j;

    cout << "Массив B:" << endl;

    for (i = 0; i < M; i++) 
    {
        for (j = 0; j < N; j++)
        {
            if (Z[j][0] < 0)
            {
                B[j] = Z[j][0];
                cout << B[j] << " ";
                Z[j][0] = 0;
            }
        }
    }

Подскажите как записать отрицательные элементы в одномерный массив.


Ответы (1 шт):

Автор решения: qeqolla

я бы сделал это так

сначала ищу количество отрицательных элементов и создаю массив В такой длинны

    int count_neg = 0;
    
    for (auto & j : Z) {
        if (j[0] < 0)
            ++count_neg;
    }

    int *B = new int[count_neg];

потом просто добавляю отрицательные элементы в массив В

    for (auto & j : Z) {
        int i = 0;
        if (j[0] < 0){
            B[i] = j[0];
            cout << B[i] << " ";
            ++i;
        }
    }

весь код целиком

    int Z[N][M] = { {-1,-2,-3,-4,-5,-6},

                    { 2, 4, 3, 3, 1, 5},

                    { 2, 4, 3, 3, 1, 5},

                    { 2, 4, 3, 3, 1, 5},

                    { 2, 4, 3, 3, 1, 5} };

    int count_neg = 0;

    for (auto & j : Z) {
        if (j[0] < 0)
            ++count_neg;
    }

    int *B = new int[count_neg];

    cout << "Массив B:" << endl;

    for (auto & j : Z) {
        int i = 0;
        if (j[0] < 0){
            B[i] = j[0];
            cout << B[i] << " ";
            ++i;
        }
    }
→ Ссылка