Как организовать цикл обхода такого треугольника матрицы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Существует две матрицы размера NxN (N<=20). Первая введена с клавиатуры, в зависимости от i,j существует треугольник такого вида, как на картинке. Необходимо обойти его и найти максимум среди его элементов и записать в i,j второй матрицы. Все кажется простым, но как организовать цикл обхода такого треугольника, учитывая что для разных i,j он будет разным.

Решение задачи: «Как организовать цикл обхода такого треугольника матрицы»

textual
Листинг программы
/* разделим треугольник на 2 части по  горизонтали */
int get_max(const int **m, int size, int row, int col) {
    int i, j, first;
    int maxi = m[row][col];
    
    first = col;
    /* верхняя часть */
    for(j = row; j>=0; --j) {
        for(i = first; i < size; ++i) {
            if(m[i][j] > maxi)
                maxi = m[i][j];
        }
        ++first;
    }
    
    /* нижняя */
    first = col + 1;
    for(j = row + 1; j < size; --j) {
        for(i = first; i < size; ++i) {
            if(m[i][j] > maxi)
                maxi = m[i][j];
        }
        ++first;
    }
    return maxi;
}

Объяснение кода листинга программы

В данном коде реализован алгоритм поиска максимального элемента в треугольнике матрицы. Алгоритм можно разделить на следующие шаги:

  1. Инициализация переменной maxi значением элемента m[row][col].
  2. Инициализация переменной first значением col.
  3. Поиск максимального элемента в верхней части треугольника, начиная с row и first, до тех пор, пока j больше или равно 0. При этом, если элемент m[i][j] больше текущего максимального значения maxi, то обновляем maxi. После каждой итерации по внутреннему циклу увеличиваем значение first на 1.
  4. Поиск максимального элемента в нижней части треугольника, начиная с row + 1 и first, до тех пор, пока j меньше размера матрицы. При этом, если элемент m[i][j] больше текущего максимального значения maxi, то обновляем maxi. После каждой итерации по внутреннему циклу увеличиваем значение first на 1.
  5. Возврат найденного максимального значения maxi. В данном коде переменная size не используется, поэтому можно предположить, что это просто проверочный аргумент, который не влияет на работу алгоритма.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы