Программирование C++.
Дана целочисленная прямоугольная матрица. Найти разность сумм элементов на главной и побочной диагоналях.

Ответы

Ответ дал: prleha
1
матрица не может быть прямоугольной так иначе будет не понятно что подразумевается под диагональю
#include<iostream>
#include<vector>
int main() {
int n;
std::cin>>n;
std::vector<std::vector<int>> matrix(n);
for (int i =0;i<n;++i) {
    for (int j =0;j<n;++j) {
        int elem;
        std::cin>>elem;
        matrix[j].push_back(elem);
    }
}
int first_diag = 0;
int second_diag = 0;
for (int i = 0;i<n;++i) {
    first_diag+=matrix[i][i];
    second_diag += matrix[i][n-i-1];
}
int res = 0;
res = first_diag - second_diag;
std::cout<<res;
}



XxXJa6uArXxX: странно, все равно 0
prleha: там все нормально выводит
XxXJa6uArXxX: для больших матриц нормально срабатывает, а если число строк/столбцов равно 3, то показывает 0
XxXJa6uArXxX: начиная с 5 нормально робит
XxXJa6uArXxX: а нет ссори, я понял в чем дело
XxXJa6uArXxX: Спасибо)
DigitalAnnihilator: Код говнище просто редкосное, такой др*сни давно не видел, пройдемся по порядку:
#include<iostream>
#include<vector>
int main() { //мать его отступы, глаза кровоточат,
//переноси скобки всегда на новую строку
int n;
std::cin>>n; //нахрена постоянно пользовать обращение через namespace?!
//Это не огромный проект, тут нет кастомный namespace
//либо подключай весь std, либо конкретные функции и классы
std::vector<std::vector<int>> matrix(n); //см строку 15
DigitalAnnihilator: for (int i =0;i<n;++i) { //отступы, благо ++i, а не i++
for (int j =0;j<n;++j) {
int elem; //создаешь каждый раз новую переменную для новой ячейки?
//нехочешь вынести инстанс за пределы циклов?
std::cin>>elem; //снова через std
matrix[j].push_back(elem); //строка 15, почему бы не зарезервировать
//в векторе двумерную матрицу?
//наверное по тому, что тут начинаются классы,
//операторы new и конструкторы, а это слишком сложно,
DigitalAnnihilator: //если не умеешь пользоваться, не лезь,
//используй классические динамические массивы
}
}
int first_diag = 0; //Совет, лучше называть переменную слитно, но каждое новое слово,
//с вверхнего регистра, то есть к примеру firstDialog, читается проще
int second_diag = 0;
for (int i = 0;i<n;++i) { //снова, где скобка?!
first_diag+=matrix[i][i]; //тут же обращаемся к матрице по индексу и ряда и столбца,
//снова смотри 15 строку
second_diag += matrix[i][n-i-1];
}
DigitalAnnihilator: int res = 0;
res = first_diag - second_diag;
std::cout<<res;
//Где что б его return 0?! Ты имплеметировал функцию INT MAIN, она должна возращать значение!!!
}
Вас заинтересует