山东科技大学OJ Print Graphics Problem (II)

对于这种输出菱形样式的图形我在这里为大家总结了一点简单方法,这需要一点点抽象思维,但也不是很难的哦,大家不要害怕,请听小鑫娓娓道来。

首先我们要了解编译器输出格式以及C语言代码的整体趋向性,编译器输出格式是以行输出标准的,C语言代码一般是以正向发展为主要趋势的,让我们看样例输出格式,一个空心的菱形,在我们之前所接触的输出图形样式都是实菱形为主,这种空心图形没有过多接触,但也不是没有办法的,掌握每一行的输出技巧,暴力解法是可以解出来的,但是代码量过于庞大,小鑫比较懒不想写这么多代码,于是我就想出来一种新方法:将输出图形二维化,想象成二维笛卡尔坐标系,但也不是一般的笛卡尔坐标系,这个坐标的纵坐标是向下指的。下面我用一个图来解释一下吧:

围成菱形的四条线大家应该很容易就猜出来就是| X |   +   |  Y  |  =  N(N为输入的数)

二话不说先上代码:

#include<stdio.h>
#include<stdlib.h>
int print_graphic(int n)
{
    int b,i,j,k;
    int x,y;
    if(n%2==0)
    {
        for(y = -n+1 ; y <=0 ;y++)
        {
            for(x= -n+1 ; x <n; x++)
            {
                if(abs(y)+abs(x) < n)
                    printf("+");
                else if(-x + y > -n)
                    printf(" ");
            }
            printf("\n");
        }
    }
    else
    {
        for(y = 1 ; y <=n ;y++)
        {
            for(x= -n+1; x <n; x++)
            {
                if(abs(y)+abs(x) <= n)
                    printf("+");
                else if(x + y < n)
                    printf(" ");
            }
            printf("\n");
        }
    }
}

int main()
{
    int num,z=0;
    while(scanf("%d", &num)!=EOF&&num)
    {
        z++;
        if(z>=2) printf("\n");
        print_graphic(num);

    }

    return 0;
}

我用一个输出图形的函数来实行这个操作,实际上不用也可以,直接就把 if(n%2==0)和else 那两段代码拖到主函数里面就可以啦。函数的运用主要是培养模块化的思维,不如一开始就用这种方式来写代码,为以后铺路。

猜你喜欢

转载自blog.csdn.net/weixin_43820496/article/details/85053342
今日推荐