c++菱形输出问题 请问怎么解决呢?

2025-03-20 17:56:50
推荐回答(1个)
回答1:

先按照数学几何形式去理解,坐标系原点为菱形图案的中心位置,行为纵轴,列为横轴。

每个字符可以认定为这个坐标系上的一个点,那么一个点的横纵坐标的绝对值之和若是小于边长的,则对应于上图中需要打印字符的地方。否则,对应于打印空格的地方。

如此理解,代码就好写多了

#include 
#define ABS(x) ((x)<0?0-(x):(x))
void main()  
{    
    char ch = '\0';
    int len = 0;
    int i = 0, j = 0;
    scanf("%c%*[ \t\r\n]%d%*[ \t\r]", &ch, &len);

    while(ch != 'q')
    {
        for(i = 1 - len; i <= len - 1; ++i)
        {
            for(j = 1 - len; j <= len - 1; ++j)
            {
                if(ABS(i) + ABS(j) < len)
                    printf("%c", ch);
                else
                    printf(" ");
            }
            printf("\n");
        }
        
        scanf("%*[ \t\r\n]%c%*[ \t\n\r]%d%*[ \t\r]", &ch, &len);
    }
}