Задача Задача №2421815
А
А
Хорошо! Давайте по шагам разберем вашу задачу на C++ и реализуем все необходимые операции с квадратными матрицами.
- Создание и заполнение квадратных матриц случайными числами.
- Сортировка столбцов по максимальным элементам.
- Поиск последовательных положительных элементов с максимальной суммой.
- Выявление матриц с минимальной и максимальной суммой элементов и их перемножение.
Вот пример реализации на C++:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
const int MAX_SIZE = 100; // Максимальный размер матрицы
void FillMatrix(int matrix[MAX_SIZE][MAX_SIZE], int size) {
for (int i = 0; i < size; ++i)
for (int j = 0; j < size; ++j)
matrix[i][j] = rand() % 100; // Заполнение случайными числами от 0 до 99
}
void PrintMatrix(int matrix[MAX_SIZE][MAX_SIZE], int size) {
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j)
cout << matrix[i][j] << "\t";
cout << endl;
}
}
void SortColumnsByMax(int matrix[MAX_SIZE][MAX_SIZE], int size) {
for (int j = 0; j < size; ++j) {
// Найдем индекс столбца с максимальным значением
int maxIndex = j;
for (int k = j + 1; k < size; ++k) {
if (matrix[maxIndex][0] < matrix[k][0]) // Сравнение первого элемента каждого столбца
maxIndex = k;
}
// Перестановка столбцов
for (int i = 0; i < size; ++i) {
swap(matrix[i][j], matrix[i][maxIndex]);
}
}
}
int MaxFourPositiveSum(int matrix[MAX_SIZE][MAX_SIZE], int size) {
int maxSum = 0;
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
int currentSum = 0;
int count = 0;
// Движение по часовой стрелке
for (int d = 0; d < 4; ++d) {
int ni = (i + (d % size)) % size; // строки
int nj = (j + (d % size)) % size; // столбцы
if (matrix[ni][nj] > 0) {
currentSum += matrix[ni][nj];
count++;
} else {
break;
}
}
if (count == 4 && currentSum > maxSum) {
maxSum = currentSum;
}
}
}
return maxSum;
}
int SumMatrix(int matrix[MAX_SIZE][MAX_SIZE], int size) {
int sum = 0;
for (int i = 0; i < size; ++i)
for (int j = 0; j < size; ++j)
sum += matrix[i][j];
return sum;
}
void MultiplyMatrices(int matrix1[MAX_SIZE][MAX_SIZE], int matrix2[MAX_SIZE][MAX_SIZE], int result[MAX_SIZE][MAX_SIZE], int size) {
for (int i = 0; i < size; ++i)
for (int j = 0; j < size; ++j) {
result[i][j] = 0;
for (int k = 0; k < size; ++k)
result[i][j] += matrix1[i][k] * matrix2[k][j];
}
}
int main() {
srand(time(0));
int size;
cout << "Введите размер матриц: ";
cin >> size;
// Массив из 4 матриц
int matrices[4][MAX_SIZE][MAX_SIZE];
for (int m = 0; m < 4; ++m) {
FillMatrix(matrices[m], size);
cout << "Матрица " << m + 1 << ":\n";
PrintMatrix(matrices[m], size);
// Сортировка столбцов
SortColumnsByMax(matrices[m], size);
cout << "Отсортированная матрица " << m + 1 << ":\n";
PrintMatrix(matrices[m], size);
// Максимальная сумма четырех последовательных положительных элементов
int maxPositiveSum = MaxFourPositiveSum(matrices[m], size);
cout << "Максимальная сумма четырех последовательных положительных элементов в матрице " << m + 1 << ": " << maxPositiveSum << endl;
}
// Поиск матриц с минимальной и максимальной суммой
int minSumIndex = 0, maxSumIndex = 0;
int minSum = SumMatrix(matrices[0], size);
int maxSum = minSum;
for (int m = 1; m < 4; ++m) {
int currentSum = SumMatrix(matrices[m], size);
if (currentSum < minSum) {
minSum = currentSum;
minSumIndex = m;
}
if (currentSum > maxSum) {
maxSum = currentSum;
maxSumIndex = m;
}
}
// Перемножение матриц с минимальной и максимальной суммой
int result[MAX_SIZE][MAX_SIZE] = {0};
MultiplyMatrices(matrices[minSumIndex], matrices[maxSumIndex], result, size);
cout << "Результат перемножения матриц с минимальной и максимальной суммой:\n";
PrintMatrix(result, size);
return 0;
}
Объяснение кода:
- Заполнение матрицы – функции заполняют матрицы случайными числами.
- Сортировка столбцов – сортировка столбцов выполняется по максимальным значениям каждого столбца.
- Поиск максимальной суммы – реализован обход по часовой стрелке для нахождения максимальной суммы четырех последовательных положительных элементов.
- Сумма элементов – вычисляется сумма всех элементов в каждой матрице и выбираются матрицы с минимальной и максимальной суммой.
- Перемножение матриц – матрицы с минимальной и максимальной суммой перемножаются.
Замечания:
- Ширина столбцов в выводе может быть настроена по мере необходимости.
- Размер матриц ограничен
MAX_SIZE, чтобы избежать переполнения массива. - Приведенный код можно компилировать и запускать с использованием компилятора C++.
Если у вас есть дополнительные вопросы или вы хотите внести изменения в код, дайте знать!
