Загрузка данных


#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;
}