我最近开始学习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
I saw a programmer on YouTube. He wrote a very short program to solve it:
#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 )
的想法,为什么这一行代码正确获取矩阵中每个元素的值?