Вычисление суммы главной и вторичной диагоналей матрицы — распространенная задача в программировании. В этой статье мы рассмотрим несколько способов добиться этого с помощью C++. Мы предоставим примеры кода для каждого метода, чтобы вы могли выбрать тот, который лучше всего соответствует вашим потребностям.
Метод 1: итеративный подход
Итеративный подход включает в себя обход матрицы и отдельное суммирование элементов на первичной и вторичной диагоналях. Вот пример фрагмента кода:
#include <iostream>
using namespace std;
int calculatePrimaryDiagonalSum(int matrix[][N], int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += matrix[i][i];
}
return sum;
}
int calculateSecondaryDiagonalSum(int matrix[][N], int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += matrix[i][size - i - 1];
}
return sum;
}
int main() {
const int N = 3; // Matrix size
int matrix[N][N] = { {1, 2, 3},
{4, 5, 6},
{7, 8, 9} };
int primaryDiagonalSum = calculatePrimaryDiagonalSum(matrix, N);
int secondaryDiagonalSum = calculateSecondaryDiagonalSum(matrix, N);
cout << "Primary Diagonal Sum: " << primaryDiagonalSum << endl;
cout << "Secondary Diagonal Sum: " << secondaryDiagonalSum << endl;
return 0;
}
Метод 2: использование одного цикла
Если вы хотите вычислить обе диагональные суммы в одном цикле, вы можете использовать модифицированную версию итерационного подхода. Это уменьшает временную сложность за счет обхода матрицы только один раз. Вот пример кода:
#include <iostream>
using namespace std;
void calculateDiagonalSums(int matrix[][N], int size, int& primarySum, int& secondarySum) {
primarySum = 0;
secondarySum = 0;
for (int i = 0; i < size; i++) {
primarySum += matrix[i][i];
secondarySum += matrix[i][size - i - 1];
}
}
int main() {
const int N = 3; // Matrix size
int matrix[N][N] = { {1, 2, 3},
{4, 5, 6},
{7, 8, 9} };
int primaryDiagonalSum, secondaryDiagonalSum;
calculateDiagonalSums(matrix, N, primaryDiagonalSum, secondaryDiagonalSum);
cout << "Primary Diagonal Sum: " << primaryDiagonalSum << endl;
cout << "Secondary Diagonal Sum: " << secondaryDiagonalSum << endl;
return 0;
}
Метод 3: использование указателей
Чтобы оптимизировать память и избежать передачи больших матриц функциям, вы можете использовать указатели для перебора элементов матрицы. Вот пример:
#include <iostream>
using namespace std;
int calculatePrimaryDiagonalSum(int* matrix, int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += *(matrix + i * size + i);
}
return sum;
}
int calculateSecondaryDiagonalSum(int* matrix, int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += *(matrix + i * size + (size - i - 1));
}
return sum;
}
int main() {
const int N = 3; // Matrix size
int matrix[N][N] = { {1, 2, 3},
{4, 5, 6},
{7, 8, 9} };
int primaryDiagonalSum = calculatePrimaryDiagonalSum(&matrix[0][0], N);
int secondaryDiagonalSum = calculateSecondaryDiagonalSum(&matrix[0][0], N);
cout << "Primary Diagonal Sum: " << primaryDiagonalSum << endl;
cout << "Secondary Diagonal Sum: " << secondaryDiagonalSum << endl;
return 0;
}
В этой статье мы рассмотрели три различных метода вычисления суммы главной и вторичной диагоналей матрицы с помощью C++. Итеративный подход, одноконтурный подход и метод на основе указателей имеют свои преимущества в зависимости от конкретных требований вашего приложения. Понимая эти методы и примеры их кода, вы сможете выбрать наиболее подходящий для ваших нужд подход. Эффективное вычисление диагональных сумм — это фундаментальная операция при манипулировании матрицами, и эти методы помогут вам выполнить ее в ваших программах на C++.