山东科技大学 OJPrint Graphics Problerm (IV) (Append Code)

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

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

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

说这么不如代码来得痛快,直接上代码:

#include<stdio.h>
#include<stdlib.h>
int print_graphic(int n)
{
    int b,i,k;
    b=n/2;
    for(i=(-b);i<=b;i++)
        for(k=(-b);k<=b;k++)
        {
            if(abs(k)>=b-abs(i))
                printf("*");
            else printf(" ");
            if(k==b)
                printf("\n");
        }
}

int main()
{
    int num;
    scanf("%d", &num);
    print_graphic(num);
    return 0;
}

 在这题中N是要处理的   输入的数为奇数,又要输出11行,对N/2就可以啦,我觉得我的代码还不够抽象,直接看的话还是有一丢丢晦涩,函数中 i 代表y轴  k代表x轴,循环y轴每进行++操作就要输出一个换行好啦,还有一系列输出图形的题目我陆续更新哈。

希望大家多多关注,小鑫会很努力地写博客的,我在这给各位大爷跪下了     噗通~~~~~~!

猜你喜欢

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