Проблема в том, как оббежать элементы матрицы, расположенные ниже побочной диагонали, верно?
Понятно, что нам в любом случае понадобится два индекса, i будет бегать по строкам, а j по элементам внутри строки. Если мы внимательно присмотримся к элементам, лежащим ниже главной диагонали, то заметим, что они не входят в первую строку матрицы, так что внешний цикле у нас будет от первой строки (нулевую пропускаем) до последней.
А вот внутренний цикл по j, который будет оббегать необходимые элементы внутри i-ой строки, очевидно уже будет зависеть от значения i. Для i равного 1, мы должны взять всего один элемент с индексом [1][3]. Для i равного 2, мы должны взять уже два элемента с индексами [2][2] и [2][3]. И так далее. То есть чем больше i, тем больше элементов из строки мы должны взять. Следует заметить, что последний элемент строки в любом случае входит в искомые, значит правая граница цикла по j нами известна - это N-1. Левая же граница, очевидно, зависит от i. Чем i больше, тем граница меньше, а значит в интервал попадает больше элементов. Не сложно сообразить, что левая граница должна быть N-1-(i-1), иными словами N-i.
Всё вышесказанное выливается в следующую простенькую программу, которая выводит все элементы, расположенные ниже главной диагонали матрицы:
Код: Выделить всё
#include <iostream>
const int N = 4;
const int a[N][N] =
{
{ 4, 2, 3, 4 },
{ 0, 7, 5, -2 },
{-4, 3, 2, 8 },
{ 4, -2, 8, 3 }
};
int main()
{
for (int i = 1; i < N; ++i)
for (int j = N-i; j < N; ++j)
std::cout << a[i][j] << " ";
return 0;
}
Результат работы:
-2 2 8 -2 8 3
P.S. Ты уже второй раз создаёшь тему с неинформативным названием. В этот раз я её переименовал. Спешу напомнить, что подобные темы могут быть удалены основываясь на соглашении, которое ты подписал при регистрации. Уважай труд людей, которые тебе помогают - делай понятные темы.