Задача
В квадратной таблице [latex] n × n [/latex] подсчитать сумы чисел, стоящих на главной и побочной диагоналях.
Входные данные
Вводится число [latex]n (1 \le n \le 500)[/latex], а затем матрица [latex] n × n [/latex]. Элементы матрицы — числа по модулю не больше [latex]10^5[/latex].
Для того, чтобы понять, как какая диагональ называется, внимательно присмотритесь ко второму примеру.
Выходные данные
Вывести сумму чисел сначала на главной, а затем на побочной диагонали.
Тесты
Вход | Выход |
4 134 475 30 424 303 151 419 235 248 166 90 42 318 237 184 36 |
411 1327 |
7 -59 21 7 5 12 868 -565 32 19 52 3 7 11 0 3 -123 -52 -99 -857 -4621 -561 11 232 86 652 46 3244 572 857 -1242 -6767 923 -575 12 1 552 232 2 63 -76 23 0 12 34 87 20 -7 767 959 |
967 -7282 |
3 1 45 82 96 29 90 757 23 12 |
42 868 |
2 12 32 99 71 |
83 131 |
5 12 32 54 76 12 95 23 21 123 0 65 32 1 773 992 5 32 155 866 912 134 44 74 11 23 |
36 136 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <iostream> using namespace std; int main() { int n; int m=0; int c=0; cin >> n; int ** x = new int * [n]; for (int i = 0; i < n; i++) x[i] = new int[n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) cin >> x[i][j]; } for (int i = 0; i < n; i++){ m+=x[i][i]; c+=x[i][n-1-i]; } for (int i = 0; i < n; i++) delete []x[i]; delete []x; cout << m << " " << c; return 0; } |
Решение
Создаем динамический массив.
Чтобы найти сумму главной диагонали берём, лишь те элементы массива, в которых номер строки и столбца равны.
Чтобы просуммировать побочную диагональ, используем цикл в котором используем элементы массива начиная с первого столбца и последней строки и движемся к противоположному (первая строка, последний столбец).
Ссылки
Тесты очень похоже, что не соответствуют условию и решению.
Раз уж Вы выделяете массив из кучи, то удалите его по окончании работы программы, пожалуйста.
Отредактировал, опираясь на ваши советы. Надеюсь всё в порядке.
Теперь с табуляциями вокруг последнего цикла проблема.
2
12 32
99 71 85 131
Какие два числа нужно сложить, чтобы получить 85?
Использовать вышеуказанные числа?
Не знаю, но это Ваш четвертый пример
Действительно. Спасибо
У Вас в других примерах тоже не сходится. Вы ответы руками считали?
Да, наверное.
Спасибо.
Еще раз подчеркну, что здесь с табуляциями что-то не в порядке. А всему виной жадность — пожалели лишнюю строчку для тела цикла.
По поводу уровня вложенности не совсем ясно. Можно поподробней, если не сложно.
Забудьте прошлый комментарий. Посмотрите, пожалуйста, новую редакцию.
Хорошо.
Только научитесь «гуглить» команды laTex. Тогда легко найдете \times и \leqslant, а не будете просто копировать откуда-то символы, которые выглядят очень похоже, но не позволяют делать семантический (смысловой) анализ формул.