Условие: Дана целочисленная квадратная матрица. Определить:
1) сумму элементов в тех столбцах, которые не содержат отрицательных элементов;
2) минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы.
Листинг программы (через динамический массив и файл)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int n, ** arr;
ifstream fin("input4.txt");
if (!fin.is_open())
{
cout << "Ошибка открытия файла" << endl;
return 1;
}
fin >> n;
arr = new int* [n];
cout << "Матрица из файла" << endl;
for (int i = 0; i < n; i++)
{
arr[i] = new int[n];
for (int j = 0; j < n; j++)
{
fin >> arr[i][j];
cout << arr[i][j] << "\t";
}
cout << endl;
}
fin.close();
cout << "Сумма элементов в столбцах, "
<< "в которых нет отрицательных элементов" << endl;
for (int j = 0; j < n; j++)
{
int sum = 0;
for (int i = 0; i < n && sum >= 0; i++)
if (arr[i][j] < 0)
sum = -1;
else
sum += arr[i][j];
if (sum >= 0)
cout << "Столбец " << j + 1 << ": " << sum << endl;
}
cout << "Минимум среди сумм модулей элементов диагоналей, "
<< "паралельных побочной" << endl;
int minSum = abs(arr[0][0]);
for (int i = 0; i < n; i++)
{
int sumU = 0, sumD = 0;
for (int j = 0; j < i + 1; j++)
{
sumU += abs(arr[i - j][j]);
sumD += abs(arr[n - 1 - i + j][n - 1 - j]);
}
if (sumU < minSum)
minSum = sumU;
if (sumD < minSum)
minSum = sumD;
}
cout << minSum;
for (int i = 0; i < n; i++)
delete[] arr[i];
delete[] arr;
return 0;
}
Скриншот работы
Листинг программы (через локальный массив)
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
const int n = 4;
int arr[n][n] = {{ 12, -4, 7, 8 }, {0, 5, 1, -20}, {1, 13, 7, -1}, {12, 0, 12, 18}};
cout << "Исходная матрица" << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << arr[i][j] << "\t";
cout << endl;
}
cout << "Сумма элементов в столбцах, "
<< "в которых нет отрицательных элементов" << endl;
for (int j = 0; j < n; j++)
{
int sum = 0;
for (int i = 0; i < n && sum >= 0; i++)
if (arr[i][j] < 0)
sum = -1;
else
sum += arr[i][j];
if (sum >= 0)
cout << "Столбец " << j + 1 << ": " << sum << endl;
}
cout << "Минимум среди сумм модулей элементов диагоналей, "
<< "паралельных побочной" << endl;
int minSum = abs(arr[0][0]);
for (int i = 0; i < n; i++)
{
int sumU = 0, sumD = 0;
for (int j = 0; j < i + 1; j++)
{
sumU += abs(arr[i - j][j]);
sumD += abs(arr[n - 1 - i + j][n - 1 - j]);
}
if (sumU < minSum)
minSum = sumU;
if (sumD < minSum)
minSum = sumD;
}
cout << minSum;
return 0;
}
Скриншот работы