#include <iostream> using namespace std;
int main() { setlocale(LC_ALL, "Russian"); int N, M;
cout << "Введите N и M: ";
cin >> N >> M;
int A[100][100];
cout << "Введите матрицу:\n";
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
cin >> A[i][j];
// 1. Подсчет "особых" элементов (минимумов в столбцах)
int count = 0;
for (int j = 0; j < M; j++) {
int minVal = A[0][j];
for (int i = 1; i < N; i++)
if (A[i][j] < minVal) minVal = A[i][j];
for (int i = 0; i < N; i++)
if (A[i][j] == minVal) count++;
}
cout << "\nОсобых элементов: " << count << endl;
// 2. Вывод строк в порядке возрастания характеристик
cout << "\nОтсортированная матрица:\n";
// Массив, где мы отмечаем: напечатана ли уже строка? (изначально все false)
bool printed[100] = {false};
// Внешний цикл: повторяем N раз (по количеству строк)
for (int k = 0; k < N; k++) {
int bestIndex = -1; // Индекс строки с самой маленькой суммой
int bestSum = 0; // Сама маленькая сумма
// Ищем среди еще не напечатанных строк
for (int i = 0; i < N; i++) {
if (!printed[i]) {
int currentSum = 0;
// Считаем сумму положительных четных элементов для строки i
for (int j = 0; j < M; j++)
if (A[i][j] > 0 && A[i][j] % 2 == 0) currentSum += A[i][j];
// Если это первая найденная строка ИЛИ её сумма меньше текущего минимума
if (bestIndex == -1 || currentSum < bestSum) {
bestSum = currentSum;
bestIndex = i;
}
}
}
printed[bestIndex] = true; // Отмечаем, что эту строку мы напечатали
// Печатаем выбранную строку
for (int j = 0; j < M; j++) cout << A[bestIndex][j] << "\t";
cout << "| Сумма: " << bestSum << endl;
}
return 0;
}