为什么此代码创建正确的模式?

时间:2020-03-01 10:51:40

标签: c loops

我最近开始学习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 )的想法,为什么这一行代码正确获取矩阵中每个元素的值?

0 个答案:

没有答案