Я недавно начал изучать язык программирования 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 )
, почему эта строка кода получает правильное значение каждого элемента в матрице?