Найти произведение чисел от 1 до 10, расположенных на диагоналях квадратной матрицы с нечетным количеством строк и столбцов
Если задать нечетное число для размера матрицы, элемент (который > 0) на пересечении диагоналей матрицы подсчитывается 2 раза при умножении элементов диагоналей. А нужно только 1 раз.
multi / array[n/2][n/2]; - переменная для хранения умножения почему-то не делится на этот элемент.
Подскажите, пожалуйста, как исправить?
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main () {
cout << "Введите n: ";
int n = 0;
cin >> n;
//создание массива
srand(time(0));
int** array = new int* [n];
for (int i = 0; i < n; i++) {
array[i] = new int[n];
for (int j = 0; j < n; j++) {
array[i][j] = -10 + rand() % (10 * 2) + 1;
cout << array[i][j] << "\t";
}
cout << endl;
}
//находим произведение
int multi = 1;
for (int i = 0; i < n; i++) {
if (array[i][i] >= 1 && array[i][i] <= 10)
multi *= array[i][i];
if (array[i][n - i - 1] >= 1 && array[i][n - i - 1] <= 10)
multi *= array[i][n - i - 1];
}
/*если матрица с нечетным количеством элементов, цикл выше умножает 2 раза на элемент,
находящийся на пересечении диагоналей*/
if (n % 2 != 0)
multi / array[n / 2][n / 2];
cout << "\nПроизведение чисел от 1 до 10 на диагоналях: " << multi;
for (int i = 0; i < n; i++) {
delete[] array[i];
}
delete[] array;
return 0;
}
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
Проще всего если размер матрицы нечетный, а элемент ненулевой - поделить на него по окончании подсчета.