关于C语言打印菱形图案规律分析

关于C语言打印菱形图案规律分析

include

int main()
{
int n;
scanf(" %d", &n);

int i;
int j;
for (i=1; i<=(n+1)/2; ++i)
{
    for (j=1; j<=n+1-2*i; ++j)
    {
        printf(" ");
    }
    
    for (j=1; j<=2*i-1; ++j)
    {
        printf("* ");
    }
    
    printf("\n");
}

for (i=1; i<=(n-1)/2; ++i)
{
    for (j=1; j<=2*i; ++j)
    {
        printf(" ");
    }
    
    for (j=1; j<=n-2*i; ++j)
    {
        printf("* ");
    }
    
    printf("\n");
}

 return 0;

}
这个星号和空格的规律是如何找到的, j<=n+1-2i这一步是什么意思,还有这个 j<=n-2i是怎么实现的

星号和空格的规律是通过观察总行数n, 行数与空格数目及星号数目之间的关系找到的 ,下面是我的理解,供参考,例如,输入5,打印的图形如下:

img

首先,打印前面的正三星,总共3行,行数即:1,2,3 ,可以使用第一个for循环的i=1,开始到 (n+1)/2=(5+1)/2 = 3 来实现遍历打印每一行,这个公式可以通过总行数n和行数的关系推导出来。

然后是,打印正三角的空格,第一行4个,第二行2个,第三行0个 ,与总行数即行数的关系是, n+1-2xi , 第一行:5+1-2x1=4, 第二行:5+1-2x2=2,第三行:5+1-3x2=0。

接着是,打印星号,第一行1个,第二行3个,第三行5个,与行数的关系即2*i-1,第一行:2x1-1=1,第二行:2x2-1=3, 第三行:3x2-1= 5.

最后,打印每一行结尾的换行符。

下面菱形的倒三角形,寻找星号和空格的规律可以同样如此寻找,总的办法就是从前面几个具体数据推导出一般性可以用于后续打印的规律,例如:

星号的规律,倒三角的第一行3个星号,第二行1个星号,与倒三角行数的关系是:n-2xi , 第一行:5-2x1=3,第二行:5-2x2=1.


#include <stdio.h>
//https://ask.csdn.net/questions/7811700?spm=1005.2025.3001.5141
int main()
{
int n;
scanf(" %d", &n);

int i;
int j;
for (i=1; i<=(n+1)/2; ++i)
{
    for (j=1; j<=n+1-2*i; ++j)
    { 
        printf(" ");
    }
    
    for (j=1; j<=2*i-1; ++j)
    {
        printf("* ");
    }
    
    printf("\n");
}
 
for (i=1; i<=(n-1)/2; ++i)
{
    for (j=1; j<=2*i; ++j)
    {
        printf(" ");
    }
    
    for (j=1; j<=n-2*i; ++j)
    {
        printf("* ");
    }
    
    printf("\n");
}
 
 return 0;
}

img