Павел Лыткин
S:09:36:33 20.10
R:09:37:23 20.10
#include <stdio.h> // библиотека для printf, scanf
#include <stdlib.h> // библиотека для rand(), srand()
#include <time.h> // библиотека для time() — используется для генерации случайных чисел
int main() {
int M, N; // размеры массива: M — строки, N — столбцы
// Ввод размеров массива
printf(*Введите количество строк M и столбцов N: *);
scanf(*%d %d*, &M, &N);
// Проверяем корректность размеров
if (M <= 0 || N <= 0 || M > 100 || N > 100) {
printf(*Некорректные размеры массива!\n*);
return 0;
}
int arr[100][100]; // сам двумерный массив (максимум 100x100)
// Заполняем массив случайными числами
srand(time(NULL)); // инициализация генератора случайных чисел (чтобы числа были разными при каждом запуске)
printf(*\nИсходный массив:\n*);
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
arr[i][j] = rand() % 50 - 10; // случайные числа от -10 до 39
printf(*%4d*, arr[i][j]); // выводим каждый элемент для наглядности
}
printf(*\n*);
}
// Сортировка строк по возрастанию (обычный пузырёк)
for (int i = 0; i < M; i++) { // для каждой строки
for (int k = 0; k < N - 1; k++) { // несколько проходов для сортировки
for (int j = 0; j < N - k - 1; j++) {
if (arr[i][j] > arr[i][j + 1]) {
int temp = arr[i][j];
arr[i][j] = arr[i][j + 1];
arr[i][j + 1] = temp;
}
}
}
}
printf(*\nМассив после сортировки строк по возрастанию:\n*);
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++)
printf(*%4d*, arr[i][j]);
printf(*\n*);
}
// Находим строку с минимальным чётным числом
int min_even = 999999; // большое число для начального сравнения
int min_row = -1; // индекс строки, где найдено минимальное чётное
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
if (arr[i][j] % 2 == 0) { // проверяем чётность
if (arr[i][j] < min_even) { // ищем минимальное чётное
min_even = arr[i][j];
min_row = i;
}
}
}
}
if (min_row == -1) {
printf(*\nЧётных чисел нет — строка не удаляется.\n*);
} else {
printf(*\nМинимальное чётное число = %d (строка %d)\n*, min_even, min_row);
// Удаляем найденную строку
for (int i = min_row; i < M - 1; i++) {
for (int j = 0; j < N; j++) {
arr[i][j] = arr[i + 1][j]; // сдвигаем строки вверх
}
}
M--; // количество строк уменьшается на 1
}
printf(*\nМассив после удаления строки с минимальным чётным числом:\n*);
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++)
printf(*%4d*, arr[i][j]);
printf(*\n*);
}
// Находим столбец с максимальной суммой элементов
int max_sum = -999999;
int max_col = -1;
for (int j = 0; j < N; j++) {
int sum = 0;
for (int i = 0; i < M; i++)
sum += arr[i][j]; // считаем сумму столбца
if (sum > max_sum) {
max_sum = sum;
max_col = j;
}
}
printf(*\nСтолбец с максимальной суммой элементов: %d (сумма = %d)\n*, max_col, max_sum);
// Добавляем столбец единиц после этого столбца
// Для этого сдвигаем столбцы вправо, начиная с конца
for (int i = 0; i < M; i++) {
for (int j = N; j > max_col + 1; j--) {
arr[i][j] = arr[i][j - 1];
}
arr[i][max_col + 1] = 1; // вставляем столбец единиц
}
N++; // количество столбцов увеличилось на 1
// Выводим итоговый массив
printf(*\nИтоговый массив после всех операций:\n*);
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++)
printf(*%4d*, arr[i][j]);
printf(*\n*);
}
return 0; // завершение программы
}