Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с задачей с++

Кантемир Ученик (90), закрыт 1 год назад
Дана целочисленная квадратная матрица. Определить:

сумму элементов в тех столбцах, которые содержат хотя бы один

отрицательный элемент;

номера тех строк, в которых сумма положительных элементов

максимальна
Лучший ответ
Двоечник Обыкновенный Высший разум (102404) 1 год назад
// если значения должны сами генерироваться
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
int n, ** A, * est_minus_stolb, * sum_stolb, max, * sum_strok;

do
{
cout << "Размер квадратной матрицы: ";
cin >> n;
}while(n < 2); // чтобы было хотя бы 2 строки и 2 столбца

// выделение памяти
A = new int*[n];
for(int x = 0; x < n; x++)
A[x] = new int[n];

est_minus_stolb = new int[n];

sum_stolb = new int[n];

sum_strok = new int[n];

// генерация значений матрицы
srand(time(nullptr)); // чтобы при каждом запуске программы числа были "случайными"
for(int x = 0; x < n; x++)
{
for(int y = 0; y < n; y++)
{
A[x][y] = rand() % 23 - 11; // диапазон [-11;11]
cout << A[x][y] << '\t'; // вывод на экран
}
cout << endl;
}
cout << endl;

// ищем отрицательный элемент в столбце
// и считаем сумму элементов
for(int y = 0; y < n; y++)
{
est_minus_stolb[y] = 0;
for(int x = 0; x < n; x++)
{
if(A[x][y] < 0)
{
est_minus_stolb[y] = 1; // нашли
break;
}
}
if(est_minus_stolb[y])
{
sum_stolb[y] = 0;
for(int x = 0; x < n; x++)
sum_stolb[y] += A[x][y]; // складываем все элементы столбца
cout << "В столбце " << y + 1 << " сумма элементов равна "
<< sum_stolb[y] << '.' << endl;
}
}

// ищем максимальную сумму положительных элементов в строках
max = 0;
for(int x = 0; x < n; x++)
{
sum_strok[x] = 0;

for(int y = 0; y < n; y++)
if(A[x][y] > 0) sum_strok[x] += A[x][y]; // сумма положительных элементов

if(sum_strok[x] > max)
max = sum_strok[x];
}

// показываем номера строк
cout << "Номера строк, в которых сумма положительных элементов максимальна:" << endl;
if(max)
{
for(int x = 0; x < n; x++)
{
if(sum_strok[x] == max)
{
cout << x + 1 << endl;
}
}
}
else cout << "Таких строк нет." << endl;

// освобождение памяти
if(sum_strok == (int*) nullptr) exit(1);
delete [] sum_strok;
sum_strok = (int*) nullptr;

if(sum_stolb == (int*) nullptr) exit(1);
delete [] sum_stolb;
sum_stolb = (int*) nullptr;

if(est_minus_stolb == (int*) nullptr) exit(1);
delete [] est_minus_stolb;
est_minus_stolb = (int*) nullptr;

if(A == (int**) nullptr) exit(1);
for(int x = 0; x < n; x++)
{
if(A[x] == (int*) nullptr) exit(1);
delete [] A[x];
A[x] = (int*) nullptr;
}
delete [] A;
A = (int**) nullptr;

return 0;
}
Остальные ответы
Похожие вопросы