Почему этот код создает правильный шаблон? - PullRequest
0 голосов
/ 01 марта 2020

Я недавно начал изучать язык программирования C и поэтому начал заниматься проблемами на Hackerrank. Одна из проблем заключается в следующем:

В этой задаче вам необходимо распечатать шаблон следующей формы, содержащий числа от 1 до n.

4 4 4 4 4 4 4  
4 3 3 3 3 3 4   
4 3 2 2 2 3 4   
4 3 2 1 2 3 4   
4 3 2 2 2 3 4   
4 3 3 3 3 3 4   
4 4 4 4 4 4 4  

Я видел программиста на YouTube. Он написал очень короткую программу для ее решения :

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define max(x,y) ((x)>(y)?x:y)
int main() 
{

    int n;
    scanf("%d", &n);
    int len = n*2 - 1;

    for (int i = 0; i < len; i++){
        for(int j = 0; j < len; j++){
            printf("%d ",max( abs(n -i-1) + 1, abs(n-j-1) +1 ));
        }
        printf("\n");
    }
    return 0;
}

Я уже перечислил все индексации матрицы 2n-1 x 2n-1 и попытался наблюдать взаимосвязь. Но я не могу сформулировать соотношение max( abs(n -i-1) + 1, abs(n-j-1) +1 ).

Я просто не понимаю идею max( abs(n -i-1) + 1, abs(n-j-1) +1 ), почему эта строка кода получает правильное значение каждого элемента в матрице?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...